对于大型数组,numpy应该是更快的解决方案。
在numpy中,您应该结合使用向量化计算,ufuncs和索引来解决问题,因为它可以
C快速运行。与此相比,遍历numpy数组效率低下。
(最糟糕的事情是,使用在问题中的第一句话所示的
range或创建的索引来遍历数组
np.arange,但是我不确定您是否真的是这样。)
import numpy as npimport syssys.version# out: '2.7.3rc2 (default, Mar 22 2012, 04:35:15) n[GCC 4.6.3]'np.version.version# out: '1.6.2'size = int(1E6)%timeit for x in range(size): x ** 2# out: 10 loops, best of 3: 136 ms per loop%timeit for x in xrange(size): x ** 2# out: 10 loops, best of 3: 88.9 ms per loop# avoid this%timeit for x in np.arange(size): x ** 2#out: 1 loops, best of 3: 1.16 s per loop# use this%timeit np.arange(size) ** 2#out: 100 loops, best of 3: 19.5 ms per loop
因此,在这种情况下,numpy比正确使用numpy快4倍
xrange。根据您的问题,numpy的速度可能比速度提高4到5倍要快得多。
对这些问题的答案这个问题说明了使用numpy的阵列,而不是蟒蛇列出了大型数据集的一些有利条件。



