我一直在想这个问题.正如标题所说,哪个更快,实际功能还是简单地提升到半功率?
UPDATE
这不是过早优化的问题.这只是底层代码实际工作原理的问题.Python代码的工作原理是什么?
我发送了Guido van Rossum电子邮件,因为我真的很想知道这些方法的不同之处.
在Python中至少有3种方法可以做平方根:math.sqrt,'**'运算符和pow(x,.5).我只是好奇每个实现的差异.谈到效率哪个更好?
pow和**是等价的; math.sqrt不适用于复数,也不适用于C sqrt()函数的链接.至于哪一个更快,我不知道......
在我的领域中,将一些数字对齐,一起操作它们并取结果的平方根是很常见的.例如,这在毕达哥拉斯定理和RMS计算中完成.
在numpy中,我做了以下事情:
result = numpy.sqrt(numpy.sum(numpy.pow(some_vector, 2)))
Run Code Online (Sandbox Code Playgroud)
在纯python中会出现这样的情况:
result = math.sqrt(math.pow(A, 2) + math.pow(B,2)) # example with two dimensions.
Run Code Online (Sandbox Code Playgroud)
但是,我一直在使用这种纯Python形式,因为我发现它更紧凑,独立于导入,看似相同:
result = (A**2 + B**2)**0.5 # two dimensions
result = (A**2 + B**2 + C**2 + D**2)**0.5
Run Code Online (Sandbox Code Playgroud)
我听说有些人认为**运算符是一种黑客攻击,并且通过对它进行取幂来对数字进行求数0.5是不可读的.但我想问的是:
"有没有任何计算理由更喜欢前两种替代品而不是第三种替代品?"
谢谢阅读!
我知道我可以使用找到表达式的平方根math.sqrt(x).
我也知道我可以找到平方根x**0.5.
但两个为什么呢?这不是非pythonic吗?有什么用的math.sqrt()时候,我们可以直接将其提升到0.5次方?