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循环.谢谢!
使用accumarray和unique:
[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)