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

spa*_*ger 3 arrays matlab matrix

我有矩阵:

a=[1 2
   2 3
   1 5
   3 4
   2 9];
Run Code Online (Sandbox Code Playgroud)

我想通过将第一列元素匹配的第二列汇总在一起来简化它.因此,上述矩阵a应成为:

a=[1 7
   2 12
   3 4];
Run Code Online (Sandbox Code Playgroud)

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

the*_*alk 6

使用accumarrayunique:

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

out =

     1     7
     2    12
     3     4
Run Code Online (Sandbox Code Playgroud)

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

function subs = unique3rdOutput( vec )
   [~,~,subs] = unique(vec)
Run Code Online (Sandbox Code Playgroud)

然后

out = [ unique(a(:,1)), accumarray(unique3rdOutput(a(:,1)),a(:,2)) ]
Run Code Online (Sandbox Code Playgroud)

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

out = [ unique(a(:,1)) accumarray(a(:,1),a(:,2)) ]
Run Code Online (Sandbox Code Playgroud)

或者根据Luis Mendo的建议:

out = [ (1:max(a(:,1))).' accumarray(a(:,1),a(:,2)) ]
Run Code Online (Sandbox Code Playgroud)