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