2017-08-13 14 views
2

と仮定我々は、マトリックス重複行インデックスで、行列の複数の行の行ベクトルを追加

A = [1,2;3,4;5,6] 
1 2 
3 4 
5 6 

Iは、MATLABは、例えば、複数の行にベクトルを追加できることを知っている

A([1,2],:) = A([1,2],:) + [1,1]; 

次いで

A = 
    2 3 
    4 5 
    5 6 

ただし、Aは、([1,2,1] :) +は[1,1]と同じ結果を与える

その後、
A([1,2,1],:) = A([1,2,1],:) + [1,1]; 

A = 
    2 3 
    4 5 
    5 6 

これは私が望むものではありません。 望ましい効果は二回、最初の行に[1,1]を追加して、期待される結果は、

A([1,2,1],:) = A([1,2,1],:) + [1,1]; 

であり、Aは、どのように私はこれを達成ん

A = 
    3 4 
    4 5 
    5 6 

すべきですか?ありがとう!

答えて

2

これは、空想的なインデックス付けでは達成できません。 MATLABは、最初A([1,2,1],:) + [1,1];ため

2 3 
4 5 
2 3 

ある右側を評価した後、左側の行列に割り当てます。インデックスは順番に処理されるので、最初はA(1、:)が[2 3]に置き換えられ、A(2、:)は[4 5]に置き換えられ、A(1、:)は[ 2 3] (時間の無駄)。 Aの新たに割り当てられた値は、同じ割り当ての右側で直ちに再び使用されることは決してありません。あなたが繰り返しを持っているインデックスのリストを開始する必要がある場合

代わりに、次のように動作します:

ix = [1 2 1] 
uix = unique(ix) 
counts = hist(ix, uix) 
A(uix, :) = A(uix, :) + counts' * [1 1] 

これは

A =  
    3 4 
    4 5 
    5 6 
になり
関連する問題