2010-05-05 123 views
8

嘿,有點麻煩了。嘗試將可變長度1d數組分配給數組的不同值,例如'Array of arrays'in matlab?

a(1) = [1, 0.13,0.52,0.3]; 
a(2) = [1, 0, .268]; 

但是,我得到的錯誤:

??? In an assignment A(I) = B, the number of elements in B and 
I must be the same. 

Error in ==> lab2 at 15 
a(1) = [1, 0.13,0.52,0.3]; 

我想這意味着它期待一個標量值,而不是一個數組。有人知道如何將數組賦值給這個值嗎?

我,因爲它是在一個循環

編輯在做不同的問題解決方案,而不是直接將它定義爲一個二維數組:知道了!

a(1,1:4)= [1,0.13,0.52,0.3];

a(2,1:3)= [1,0,.268];

+0

有你preallocated a?如果是這樣,怎麼辦? – 2010-05-05 01:14:43

+0

我沒有預分配它,沒想到我需要 – bcoughlan 2010-05-05 01:22:17

+0

據我所知,這不能用數組完成。如果要將數組存儲到單個地址中,請嘗試單元或結構數據類型。如果我可能會特別提出,使用二維數組會有什麼阻礙? – 2010-05-05 01:23:16

回答

13

什麼你可能想寫是

a(1,:) = [1, 0.13,0.52,0.3]; 
a(2,:) = [1, 0, .268]; 

即在第一行是[1, 0.13,0.52,0.3],第二行是[1, 0, .268]。這是不可能的,因爲(2,4)的價值是什麼?

有兩種方法可以解決問題。

(1)使用電池陣列

a{1} = [1, 0.13,0.52,0.3]; 
a{2} = [1, 0, .268]; 

(2)如果你知道列的最大可能數您的解決方案都會有,你可以預分配您的陣列,並在結果像這樣寫的(如果你不預分配,你會得到 零填充。您也冒險減緩你的循環很多,如果有多次迭代,因爲數組將在每次迭代重新創建。

a = NaN(nIterations,maxNumCols); %# this fills the array with not-a-numbers 

tmp = [1, 0.13,0.52,0.3]; 
a(1,1:length(tmp)) = tmp; 
tmp = [1, 0, .268]; 
a(2,1:length(tmp)) = tmp; 
+0

使用方法(1),如果您知道每個數組將會有多長(所有長度都不同),您是否可以初始化'a'以便預先分配內存? – Edd 2014-07-12 17:58:38

+1

@clairharrison:是的。 '[a {1:33}] = deal(zeros(20,4));'請注意,如果之前已經聲明瞭'a',則必須清除它或顯式聲明單元格數組爲'a = cell 1,33)'。 – Jonas 2014-07-28 07:54:12