別のベクトルで指定されたインデックスで 2 番目のベクトルに追加する必要がある値のベクトルがあります。Octave/Matlab を使用してこれを達成するにはどうすればよいですか?
編集: v1 = [1 2 3 4]
v2 = [0 0]
インデックス = [1 2 1 2]
出力 = [4 6]
v1 の 1 番目と 3 番目の要素が v2 のインデックス 1 に追加され、v1 の 2 番目と 4 番目の要素が v2 の 2 番目の要素に追加されます。
これがあなたの言いたいことだと思います(質問で小さな例を提供すると、理解しやすくなります)。
値のベクトルがあります
toAdd = 1:5;
2 つ目の大きなベクトルがあります。
bigVector = 1:10;
特定のインデックスでbigVector + toAdd
の要素を に追加する場合、次のように指定します。toAdd
bigVector
indices = [1 3 5 7 9];
つまり、出力ベクトルが必要です。
[ bigVector(1)+toAdd(1);
bigVector(2);
bigVector(3)+toAdd(2);
bigVector(4);
bigVector(5)+toAdd(3);
....
]
その場合、次のことができます。
outputVector = bigVector;
outputVector(indices) = bigVector(indices) + toAdd;
特に、ベクトル によって指定されたおよびの要素を選択するoutputVector(indices)
andに注意してください。bigVector(indices)
outputVector
bigVector
indices
これは次のことを行う必要があります。
for k=unique(indices),
v2(k) = v2(k) + sum(v1(indices==k));
end
これは......
v2 = accumarray(indices, v1)