python教程—内置范围或numpy。阿兰热:哪种效率更高?-Python实用宝典

python教程—内置范围或numpy。阿兰热:哪种效率更高?

当使用范围表达式遍历一个大数组时,我应该使用Python的内置范围函数,还是使用numpy的arange来获得最佳性能?

当使用范围表达式遍历一个大数组时,我应该使用Python的内置范围函数,还是使用numpy的arange来获得最佳性能?

到目前为止,我的理由是:

arange可能求助于本机实现,因此可能更快。另一方面,arange返回一个完整的数组,它占用内存,因此可能会有开销。Python 3的range表达式是一个生成器,它不包含内存中的所有值。

回答

对于大型数组,numpy应该是更快的解决方案。

在numpy您应该使用的组合矢量化计算,< a href = " http://docs.scipy.org/doc/numpy/reference/ufuncs.html " rel = " noreferrer " >所有< / >和< a href = " http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html " rel = " noreferrer " > < / >索引来解决你的问题,因为它以C的速度运行。
与此相比,在numpy数组上进行循环效率较低。

(最糟糕的做法是用range或np创建索引来遍历数组。正如你问题的第一句话所暗示的那样,我不确定你是否真的是那个意思。

    import numpy as np import sys sys.version # out: '2.7.3rc2 (default, Mar 22 2012, 04:35:15) n[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倍的速度快得多。

解释了在大数据集中使用numpy数组而不是python列表的更多优点。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论