2013-06-28 68 views
4

從我讀過的關於Numpy數組的內容來看,它們更符合標準Python列表的內存效率。令我困惑的是,當你創建一個numpy數組時,你必須傳入一個python列表。我假設這個python列表被解構,但對我來說,如果你不得不創建一個效率更高的結構來創建高效的結構,它似乎會破壞具有高效內存數據結構的目的。numpy數組內存分配

numpy.zeros會解決這個問題嗎?

回答

6

還有many ways to create a NumPy array。傳遞一個Python列表到np.arraynp.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.fromfunctionnp.frombuffernp.fromfilenp.loadtxtnp.genfromtxtnp.fromstringnp.zerosnp.emptynp.ones。這些都提供了創建NumPy數組而不創建大型臨時Python對象的方法。

1

如果您預先分配大小,Numpy通常更高效。如果你知道你將要填充一個MxN矩陣......先創建它然後填充,而不是使用附加例子。

儘管必須創建列表,但效率方面的許多改進都來自對該結構的操作。讀/寫/計算/等。