将行向量添加到矩阵的多行,具有重复的行索引

时间:2017-08-13 03:56:02

标签: 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];

然后

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

我如何实现这一目标?谢谢!

1 个答案:

答案 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