2017-02-15 28 views
3

我剛剛閱讀了準噶瑪的文檔,無法理解第二個例子。該示例如下準噶瑪輸出的說明

val = 101:106'; 
subs = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1] 
subs = 

    1  1 
    2  2 
    3  2 
    1  1 
    2  2 
    4  1 
A = accumarray(subs,val) 
A = 

    205  0 
    0 207 
    0 103 
    106  0 

如果我做

B=accumarray(subs(:,1),val) 
C=accumarray(subs(:,2),val) 

然後我得到

B= 

    205 
    207 
    103 
    106 

C = 

    311 
    310 

這是合乎邏輯的我。但是爲什麼當我在subs中添加第二列時,B的數字只是排列在4x2矩陣的「隨機」(我想這不是隨機的,但對我來說似乎是隨機的)位置?

回答

3

從accumarry的MATLAB文檔兩者(注意:下面的報價是從R2012a文檔和不完全匹配的current version

在潛艇的元件的位置決定瓦爾斯的哪個值它 選擇累加矢量;子 中元素的值決定了輸出中累加矢量的位置。

所以在你的例子中,'隨機'排序來自subs指定的位置。打破潛艇的意義和最終結果我們得到這樣的事情:

val = 101:106'; 
subs = [1 1; 2 2; 3 2; 1 1; 2 2; 4 1] 
subs = 

    1  1 <-- take val(1) which is 101 and put it at position [1, 1] in the output 
    2  2 <-- put 102 in position [2, 2] 
    3  2 <-- put 103 in position [3, 2] 
    1  1 <--- ...and so on 
    2  2 
    4  1 
A = accumarray(subs,val) 
A = 

    205  0 <--- [1, 1] has value 101+104, [1, 2] has no value 
    0 207 <--- [2, 1] has no value, [2, 2] has value 102+105 
    0 103 <--- ...and so on 
    106  0 
+1

明白了,謝謝! :) – Max