Lyt*_*tze 1 performance r exponentiation sqrt square-root
我试过测量这两种取平方根的速度:
> system.time(expr = replicate(10000, 1:10000 ** (1/2)))
## user system elapsed
## 0.027 0.001 0.028
> system.time(expr = replicate(10000, sqrt(1:10000)))
## user system elapsed
## 3.722 0.665 4.494
Run Code Online (Sandbox Code Playgroud)
如果sqrt()功能无法与之竞争** 0.5,为什么我们需要这样的功能呢?
(系统是OS X Yusemite,R版本是3.1.2)
Rol*_*and 13
你忘记了重要的括号.以下是纠正后的时间:
system.time(expr = replicate(10000, (1:10000) ** (1/2)))
#user system elapsed
#4.76 0.32 5.12
system.time(expr = replicate(10000, sqrt(1:10000)))
#user system elapsed
#2.67 0.57 3.31
Run Code Online (Sandbox Code Playgroud)
为了增加@Roland的答案,你陷入了运算符优先级 "陷阱".^之前:(" **在解析器中翻译为^ "根据文档?"**")
真正发生的是
`:`(1, 10000 ** (1/2))
Run Code Online (Sandbox Code Playgroud)
这意味着,首先你要跑**,然后才开始1:..
未来的提示,尝试在运行复杂的操作(例如测试)之前调试代码
1:5 ** (1/2)
## [1] 1 2
sqrt(1:5)
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068
Run Code Online (Sandbox Code Playgroud)
会揭示这个问题.