2014-05-09 47 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

相關問題