我有矩阵:
a=[1 2
2 3
1 5
3 4
2 9];
我想通过将第一列匹配的第二列行相加来简化它。因此,上述矩阵a
应该成为:
a=[1 7
2 12
3 4];
我不知道如何在功能上这样做,换句话说没有for循环。谢谢!
答案 0 :(得分:6)
使用accumarray
和unique
:
[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)) ]