我正在阅读有关使用python进行数据分析的参考文献[1],并在我的笔记本电脑中测试代码。本文讨论了与使用内置列表相比,使用numpy数组如何加快速度。
但是,我很惊讶地得出相反的结果:In [5]: L =range(10000000); %timeit sum(L)
1 loops, best of 3: 201 ms per loop
In [9]: xL=np.array(L,dtype=int); %timeit sum(xL)
1 loops, best of 3: 6.79 s per loop
第一笔总和应该比第二笔慢得多。更改dtype
选项值不会更改结果。
我在OSX 10.6.8上使用ipython(2.4.0)笔记本和Firefox。我的(旧版)python / OS可能有问题吗?
[1]“天文学中的统计学,数据挖掘和机器学习:用于数据调查的实用Python ”,Zeljko Ivezic等,普林斯顿大学。新闻2014.附录A.8。
答案 0 :(得分:2)
你需要调用NumPy数组的sum
method,而不是普通的Python builtin sum
function,以便利用NumPy:
In [32]: L =range(10000000)
In [33]: %timeit sum(L)
10 loops, best of 3: 82.4 ms per loop
In [34]: xL=np.array(L,dtype=int)
In [35]: %timeit xL.sum()
100 loops, best of 3: 9.49 ms per loop
答案 1 :(得分:2)
你在numpy数组上使用python sum
而不是numpy的总和:
>>> import numpy as np
>>> L = range(10000000)
>>> timeit sum(L)
10 loops, best of 3: 69.9 ms per loop
>>> xL = np.array(L, dtype=int)
>>> timeit sum(xL)
1 loops, best of 3: 715 ms per loop
Slooooow!这是10倍的加速:
>>> timeit xL.sum()
100 loops, best of 3: 7.34 ms per loop
>>> timeit np.sum(xL)
100 loops, best of 3: 7.38 ms per loop