Rob*_*ard 11 python exponentiation
引自" Python编程:计算机科学概论 "
我们可以使用取幂**取平方根.使用math.sqrt更有效.
"有点",但在多大程度上,以及如何?
sen*_*rle 16
从理论上讲,哈马尔的答案和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
Run Code Online (Sandbox Code Playgroud)
部分问题是.操作.如果sqrt直接导入命名空间,则会略有改进.
>>> timeit.timeit(stmt='[sqrt(n) for n in range(100)]', setup='from math import sqrt', number=10000)
0.15312695503234863
Run Code Online (Sandbox Code Playgroud)
关键词:轻微.
进一步的测试表明,随着数量的增加,您从使用中获得的好处会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
Run Code Online (Sandbox Code Playgroud)
Gar*_*ees 11
无需猜测实现,我们可以阅读代码!
math.sqrt是sqrt标准C库的一个薄包装器:见mathmodule.c第956行
在**运营商具有多个实现取决于类型的参数,但在一个浮点指数的情况下,它最终分派给pow从标准C库(见floatobject.c线783).
现代的CPU通常拥有一般幂例程不使用(比较和对比实现的特殊平方根指令pow和sqrtglibc中为x86-64的,例如).但是一旦添加了所有的解释器开销(字节码,类型检查,方法调度等),原始速度的差异并不重要,并且可以由诸如您是sqrt直接呼叫还是通过math模块(如其他答案中的时间所示).
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |