对第一个元素匹配的矩阵求和?

时间:2015-09-04 09:56:59

标签: arrays matlab matrix

我有矩阵:

a=[1 2
   2 3
   1 5
   3 4
   2 9];

我想通过将第一列匹配的第二列行相加来简化它。因此,上述矩阵a应该成为:

a=[1 7
   2 12
   3 4];

我不知道如何在功能上这样做,换句话说没有for循环。谢谢!

1 个答案:

答案 0 :(得分:6)

使用accumarrayunique

[u,~,subs] = unique(a(:,1))
out = [ u, accumarray(subs,a(:,2)) ]

out =

     1     7
     2    12
     3     4

对于单行解决方案,您需要一个外部功能:

function subs = unique3rdOutput( vec )
   [~,~,subs] = unique(vec)

然后

out = [ unique(a(:,1)), accumarray(unique3rdOutput(a(:,1)),a(:,2)) ]

如果您可以确保第一列中只有正整数,您也可以使用:

out = [ unique(a(:,1)) accumarray(a(:,1),a(:,2)) ]

或路易斯·门多建议:

out = [ (1:max(a(:,1))).' accumarray(a(:,1),a(:,2)) ]