使用幂运算** 0.5比math.sqrt效率低吗? [英] Using exponentiation **0.5 less efficient than math.sqrt?
问题描述
引用"
我们本可以扎根 使用幂运算**.使用 math.sqrt效率更高.
We could have taken the square root using exponentiation **. Using math.sqrt is somewhat more efficient.
有点",但是到什么程度,以及如何?
"Somewhat", but to what extent, and how?
推荐答案
从理论上讲, duffymo的答案是很好的猜测.但是实际上,在我的机器上,它不是更有效:
Theoretically, hammar's answer and duffymo's answer are good guesses. But in practice, on my machine, it's not more efficient:
>>> import timeit
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(100)]', setup='import math', number=10000)
0.15518403053283691
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(100)]', setup='import math', number=10000)
0.17707490921020508
部分问题是.
操作.如果直接将sqrt
导入名称空间,则会得到一些改进.
Part of the problem is the .
operation. If you import sqrt
directly into the namespace, you get a slight improvement.
>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863
那里的关键字:轻微.
进一步的测试表明,随着数量的增加,使用sqrt
所获得的收益也会增加.但是仍然不是很多!
Further testing indicates that as the number gets larger, the benefit you get from using sqrt
increases. But still not by a lot!
>>> timeit.timeit(stmt='[n ** 0.5 for n in range(1000000)]', setup='import math', number=1)
0.18888211250305176
>>> timeit.timeit(stmt='[math.sqrt(n) for n in range(1000000)]', setup='import math', number=1)
0.18425297737121582
>>> timeit.timeit(stmt='[sqrt(n) for n in range(1000000)]', setup='from math import sqrt', number=1)
0.1571958065032959
这篇关于使用幂运算** 0.5比math.sqrt效率低吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!