假设我们有一个矩阵
A = [1,2;3,4;5,6]
1 2
3 4
5 6
我知道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
我如何实现这一目标?谢谢!
答案 0 :(得分: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] 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