2011-03-24 32 views
0

我確定有一個簡單的答案,但我不確定要搜索什麼。我有一個D維數組M,其中D約束爲1 < = D < = 5,長度爲D,X的向量。我想使用D作爲M內的地址並將值在那個地址,所以如果D是[1 2 3],我想增加M(1,2,3)。我知道我能做到這一點,像這樣:Matlab中的可變長度數組尋址

if D == 1 
    M(X(1)) = M(X(1)) + 1; 
end 

if D == 2 
    M(X(1), X(2)) = M(X(1), X(2)) + 1; 
end 

但它確實難看,我必須想象有一個更簡單,更笨拙的方式。謝謝!

回答

3

您可以使用函數sub2ind將地址向量D轉換爲M中的相應尺寸。但是,這需要您將D存儲爲單元格而不是矢量。下面的例子應該有所幫助。

A=magic(5);%# just a test matrix 

A= 
17 24  1  8 15 
23  5  7 14 16 
4  6 13 20 22 
10 12 19 21  3 
11 18 25  2  9 

d={3,4};%we need the element at row 3, column 4 
indx=sub2ind(size(A),d{:});%# get the index corresponding to the subscript 3,4 

A(indx) 

ans= 
20 

也可以直接索引入矩陣A作爲A(sub2ind(size(A),d{:})),而無需創建一個單獨的變量。

您也可以使用num2cell將矢量轉換爲單元格。這可能是一個更好的選擇,因爲您可能需要將D作爲向量存儲用於其他目的。所以相應的行變成

indx=sub2ind(size(A),num2cell(d)); 
+0

奇妙 - 這正是我所期待的。謝謝! – 2011-03-24 04:58:57

+0

@haldean,我編輯了我的答案,顯示瞭如果你不需要將'D'作爲一個單元格存儲的話。你可以直接轉換它。 – abcd 2011-03-24 05:06:35

+0

嘿,那是我閱讀你的答案後,我首先想到的。再次感謝! – 2011-03-24 05:07:37