Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python和numpy进行高效编码_Python_Performance_Numpy - Fatal编程技术网

使用python和numpy进行高效编码

使用python和numpy进行高效编码,python,performance,numpy,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 p

我正在阅读一篇关于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.

为了利用NumPy,您需要调用NumPy数组,而不是普通Python:

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,您需要调用NumPy数组,而不是普通Python:

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

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

阿格!我的错!我本应该更小心的。谢谢阿格!我的错!我本应该更小心的。谢谢我为这样一个愚蠢的问题道歉。我应该在复制代码时更加小心。在得到两个正确答案后,我不确定是否应该删除这个问题。@unutbu,wim,如果我删除我的问题,你们两个都有足够高的声誉,不会有太大的变化(我想这会删除你们在这里获得的声誉)。老实说,我认为我的这个问题只是造成了这里的噪音。马斯尔,我认为你的问题很好,根本没有垃圾问题。只有愚蠢的问题。:)还有那个!绝对不是合适的日子。我为这样一个愚蠢的问题道歉。我应该在复制代码时更加小心。在得到两个正确答案后,我不确定是否应该删除这个问题。@unutbu,wim,如果我删除我的问题,你们两个都有足够高的声誉,不会有太大的变化(我想这会删除你们在这里获得的声誉)。老实说,我认为我的这个问题只是造成了这里的噪音。马斯尔,我认为你的问题很好,根本没有垃圾问题。只有愚蠢的问题。:)还有那个!绝对不是合适的日子。