对于大型阵列,numpy应该是更快的解决方案.
在numpy中你应该使用矢量化计算的组合,ufuncs和indexing来解决你在C速度下运行的问题.
与此相比,在numpy数组上循环效率低下.
(你可以做的最糟糕的事情就是用你的问题中的第一句话建议使用范围或np.arange创建的索引来迭代数组,但我不确定你是否真的这么说.)
import numpy as np
import sys
sys.version
# out: '2.7.3rc2 (default, Mar 22 2012, 04:35:15)
[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倍快得多.
this question的答案解释了为大型数据集使用numpy数组而不是python列表的一些优点.