2017-02-15 7 views
3

私はaccumarrayのドキュメントを読んだだけで、2番目の例を理解することはできません。私はaccumarrayの出力の説明

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

を行う場合の例では、その後、私は私には論理的である

B= 

    205 
    207 
    103 
    106 

C = 

    311 
    310 

を取得するには、次の

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の数字はsubsに2番目の列を追加すると4x2のマトリックスの位置が "ランダム"(ランダムではありませんが、私にとってはランダムです)の位置に配置されているのはなぜですか? accumarryのMATLABドキュメントから撮影

答えて

3

(注:以下の引用は、R2012aのドキュメントからのものであり、正確current version一致しない)

潜水艦の要素の位置はヴァルスの値を決定 累積ベクトルを選択する。サブ の要素の値は、出力の累積ベクトルの位置を決定します。

あなたの例では、 'random'の順序は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

関連する問題