使用求幂** 0.5比math.sqrt效率低吗?
发布于 2021-01-29 16:07:43
关注者
0
被浏览
50
1 个回答
-
从理论上讲,hammar的答案和duffymo的答案是很好的猜测。但在实践中,我的机器上,这是 不是 更有效:
>>> 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
直接导入到名称空间中,则可以得到一些改进。>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000) 0.15312695503234863
那里的关键字: 轻微 。
进一步的测试表明,随着数量的增加,您从使用中获得的收益
sqrt
也会增加。但是仍然不是很多!>>> 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