從我讀過的關於Numpy數組的內容來看,它們更符合標準Python列表的內存效率。令我困惑的是,當你創建一個numpy數組時,你必須傳入一個python列表。我假設這個python列表被解構,但對我來說,如果你不得不創建一個效率更高的結構來創建高效的結構,它似乎會破壞具有高效內存數據結構的目的。numpy數組內存分配
numpy.zeros會解決這個問題嗎?
從我讀過的關於Numpy數組的內容來看,它們更符合標準Python列表的內存效率。令我困惑的是,當你創建一個numpy數組時,你必須傳入一個python列表。我假設這個python列表被解構,但對我來說,如果你不得不創建一個效率更高的結構來創建高效的結構,它似乎會破壞具有高效內存數據結構的目的。numpy數組內存分配
numpy.zeros會解決這個問題嗎?
還有many ways to create a NumPy array。傳遞一個Python列表到np.array
或np.asarray
就是這樣一種方式。
另一種方法是使用一個迭代器:
In [11]: np.fromiter(xrange(10), count=10, dtype='float')
Out[11]: array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])
在這種情況下,不涉及大的臨時Python列表。因此,您可以定義一個產生列表中項目的generator function而不是構建Python列表。然後創建數組,您可以將發生器傳遞給np.fromiter
。由於np.fromiter
始終創建一維數組,因此要創建更高維的數組,請在返回的值上使用reshape
。
還有np.fromfunction
,np.frombuffer
,np.fromfile
,np.loadtxt
,np.genfromtxt
,np.fromstring
,np.zeros
,np.empty
和np.ones
。這些都提供了創建NumPy數組而不創建大型臨時Python對象的方法。
如果您預先分配大小,Numpy通常更高效。如果你知道你將要填充一個MxN矩陣......先創建它然後填充,而不是使用附加例子。
儘管必須創建列表,但效率方面的許多改進都來自對該結構的操作。讀/寫/計算/等。