我对此感到困惑
def main():
for i in xrange(2560000):
a = [0.0, 0.0, 0.0]
main()
$ time python test.py
real 0m0.793s
现在让我们用numpy来看一下:
import numpy
def main():
for i in xrange(2560000):
a = numpy.array([0.0, 0.0, 0.0])
main()
$ time python test.py
real 0m39.338s
哇,CPU周期宝宝!
使用numpy.zeros(3)
会有所改善,但在我看来还不够。
$ time python test.py
real 0m5.610s
user 0m5.449s
sys 0m0.070s
numpy.version.version = '1.5.1'
如果你想知道第一个例子中是否跳过了列表创建以优化代码,那么并没有:
5 19 LOAD_CONST 2 (0.0)
22 LOAD_CONST 2 (0.0)
25 LOAD_CONST 2 (0.0)
28 BUILD_LIST 3
31 STORE_FAST 1 (a)
numpy.array
实际上比列表更复杂。在第二个片段中,您创建了一个列表和一个numpy数组(在第一个片段中只有一个列表)。这是否是如此大的差异的唯一原因,我不能说。 - Felix Klingpython -mtimeit test.py
进行基准测试。 - igorguenumpy
是否有重复使用未使用数组的机制?因为Python列表有。请注意,numpy.array
需要在numpy
对象中查找array
属性,而[]
构造函数不执行查找,即使这并不真正影响性能。 - mg.