对于大型数组,numpy应该是更快的解决方案。
在numpy中,您应该结合使用矢量化计算,ufunc和索引来解决您的问题,因为它以xrange的速度运行。与此相比,遍历numpy数组效率低下。
(您可能会做的最坏的事情是使用由xrange或np.arange创建的索引遍历数组,这是您的问题的第一句话,但我不确定您是否真的是这样。)
import numpy as np
import sys
sys.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的速度比使用xrange快4倍。 根据您的问题,numpy可能比速度提高4到5倍要快得多。
该问题的答案解释了使用numpy数组代替大型数据集的python列表的其他一些优点。