我有一个值向量,我需要在另一个向量指定的索引处添加到第二个向量。如何使用Octave / Matlab完成此操作?
编辑: v1 = [1 2 3 4]
v2 = [0 0]
indices = [1 2 1 2]
输出= [4 6]
v1的第一个和第三个元素被添加到v2的索引1,v1的第二个和第四个元素被添加到v2的第二个元素。
答案 0 :(得分:2)
我认为这就是你的意思(如果你在问题中提供一个小例子,那就更容易理解了。)
你有一个值向量
toAdd = 1:5;
你有第二个更大的向量:
bigVector = 1:10;
您希望执行bigVector + toAdd
,其中将特定索引的toAdd
元素添加到bigVector
,由{<1}}指定:
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)
和bigVector(indices)
,它会选择向量outputVector
指定的bigVector
和indices
元素。
答案 1 :(得分:1)
这应该做:
for k=unique(indices),
v2(k) = v2(k) + sum(v1(indices==k));
end
答案 2 :(得分:0)
这是......
v2 = accumarray(indices, v1)