使用python和numpy进行高效编码

时间:2015-12-11 20:33:22

标签: python performance 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上使用ipython(2.4.0)笔记本和Firefox。我的(旧版)python / OS可能有问题吗?

[1]“天文学中的统计学,数据挖掘和机器学习:用于数据调查的实用Python ”,Zeljko Ivezic等,普林斯顿大学。新闻2014.附录A.8。

2 个答案:

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