使用python和numpy进行高效编码



我正在阅读一篇关于使用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上使用带有Firefox的ipython(2.4.0)笔记本。也许是我的(旧)python/OS版本有问题?

[1] "天文学中的统计学、数据挖掘和机器学习:数据调查的实用Python",Zeljko-Ivezic等人,普林斯顿大学出版社,2014年。附录A.8。

为了利用NumPy:,您需要调用NumPy数组的sum方法,而不是简单的Python内置sum函数

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

您在numpy数组上使用的是python sum,而不是numpy的sum:

>>> 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

慢吞吞!这是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

最新更新