2014-05-09 51 views
2

如果我只需要一维数组,那么在Python标准库数组上使用NumPy数组的性能和内存容量优势是多少?或者有没有?为什么要在标准库数组上使用NumPy数组?

比方说,我有至少数千个元素的数组,我希望:快速直接访问索引时间,我希望尽可能少的内存占用。是否有性能优势,使用这样的:

from numpy import array 
a = array([1,2,3,4,5]) 

在此:

from array import array 
a = array('i', [1,2,3,4,5]) 

标准的Python list s就可以快速进入按指数倍,但任何array实施将有一个更小的内存脚印。什么是一个体面的妥协解决方案?

+0

有了5个元素阵列,可能不会。 –

+0

@ReblochonMasque对不起,我认为很明显,我只是展示了一个例子。我在长阵列中穿插。编辑的问题。 – theJollySin

+1

如果你需要循环你的数据结构,你可能想看看cython。 – Akavall

回答

3

numpy对于它的花哨索引,广播,屏蔽,灵活的内存数据视图,许多数值方法等都非常有用。如果你只是想要一个容器来保存数据,那么使用array.array或者为什么不用简单的list?我建议看一下numpy tutorial

+0

那么,循环一个Python'list'并不是特别快。而我目前的应用是科学计算,我将在这里进行大量的循环和直接访问索引。我已经更新了我的问题,以便更清楚。 – theJollySin

+6

循环'array.array'和'numpy.ndarray'实例的速度也很慢。使用numpy数组的全部意义在于,您可以一次对整个数组执行数值运算,因为循环被压低到C级,所以语法更清晰并且提供了主要的性能优势。 – DSM

+1

给[本教程](http://wiki.scipy.org/Tentative_NumPy_Tutorial)一个阅读。基本上,不用循环数组来执行操作,'numpy'允许你这样做:'a * = 2'将每个元素乘以2。 'a * a'将元素明智地乘以两个向量。 – Midnighter

3

这完全取决于你的计划与阵列。

>>> from array import array 
>>> a = array('i', [1,2,3,4,5]) 
>>> a + a 
array('i', [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]) 

注意,标准库对待数组更像这可能不是desireable序列多(或者也许是...只有你可以决定)

+0

我最感兴趣的是在相当大的数组上循环的性能速度。 (用于科学计算目的) – theJollySin

+1

@theJollySin Numpy主要是关于调用C模块,以便Python中没有完成循环。作为一个通用语句:如果你正在Python中循环大型数组,并且即使对运行时间丝毫不在意,也是错误的。如果你需要元素明智的控制,你应该看看低级语言。 – Daniel

相关问题