2015-07-19 68 views
3

我想在python \ numpy中實現Matlab的單元陣列的analouge。 的Matlab代碼會去這樣的:如何在for循環中添加不同大小的numpy數組條目(類似於Matlab的單元陣列)?

for n=1:10 
    C{n} = rand(1,n); 
end 

注意,每個電池元件具有不同的長度。現在在numpy:

for n in np.arange(10): 
    C[n] = np.random.rand(1,n) 

我得到一個錯誤,我能做些什麼來實現這個?

+0

見http://stackoverflow.com/questions/1761419/matlab-like-structure-cell-array-in-numpy – Scott

+0

是什麼錯誤? – hpaulj

回答

4

在最簡單的情況下,您可以使用標準的Python列表。他們是非常類似Matlab的電池陣列,你可以用它們來存儲任何東西:

C = [] 
for n in np.arange(10): 
    C.append(np.random.rand(1,n)) 

這將是一個很好的選擇,如果列表不會太長,如果它只有一個尺寸(所以只是向量)。請注意,在Python中,您通常不會預先分配最終大小的列表,而只需附加到空列表。 Python列表經過了優化,可以追加到最後,他們已經在底層做了某種預先分配。

如果你是翻譯有多種尺寸的電池陣列,或那些非常大的Matlab代碼,你可以使用numpy的陣列,dtype=object

m, n = 3, 6 
C = np.empty((m, n), dtype=object) 
for i in xrange(m): 
    for j in xrange(n): 
     C[i, j] = np.random.rand(i, j) 
1

您正在使用列表那裏。因此,在該循環內使用[n]進行索引之前,您需要初始化該列表。一個初始化列表中的方法是這樣的 -

C = [None]*10 # Here 10 is the length of the list