Matlab 将行向量添加到矩阵的多行,并使用重复的行索引

Matlab 将行向量添加到矩阵的多行,并使用重复的行索引,matlab,matrix,vector,Matlab,Matrix,Vector,假设我们有一个矩阵 A = [1,2;3,4;5,6] 1 2 3 4 5 6 我知道matlab允许向多行添加向量,例如 A([1,2],:) = A([1,2],:) + [1,1]; 然后 然而,([1,2,1],:)+[1,1]给出了相同的结果 A([1,2,1],:) = A([1,2,1],:) + [1,1]; 然后 这不是我想要的。预期效果是将[1,1]添加到第一行两次,预期结果是 A([1,2,1],:) = A([1,2,1],:) + [1,1]; 应该是 A =

假设我们有一个矩阵

A = [1,2;3,4;5,6] 
1 2
3 4
5 6
我知道matlab允许向多行添加向量,例如

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

然而,([1,2,1],:)+[1,1]给出了相同的结果

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

这不是我想要的。预期效果是将[1,1]添加到第一行两次,预期结果是

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

A =
    3 4
    4 5
    5 6

我如何做到这一点?谢谢

这是用花哨的索引无法实现的。Matlab将首先计算右侧,对于
A([1,2,1],:)+[1,1]

2 3
4 5
2 3
然后将其分配给左边的矩阵。索引是按顺序处理的,因此首先,A(1,:)被替换为[23],然后A(2,:)被替换为[45],然后A(1,:)再次被替换为[23](浪费时间)。决不能在同一赋值的右侧立即再次使用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
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