我有一个二维矩阵A(value, label)
。我想找到具有最大和第二大值总和的标签。例如:
A = (1, 1;
2, 1;
3, 2;
4, 2;
5, 3)
在这种情况下,结果应该是最大= 2,第二大= 3.我如何在MATLAB中执行此操作?
答案 0 :(得分:2)
[b,m,n]=unique(a(:,2));
[val, idx]= sort(accumarray(n,a(:,1)),'descend');
b(idx(1:2))
输出是:
ans =
2
3
答案 1 :(得分:1)
这样的事情应该可以解决问题。
A = [1, 1;
2, 1;
3, 2;
4, 2;
5, 3];
labels = unique(A(:,2)); % Pull out unique labels
for i = 1:numel(labels)
idx = (A(:,2) == labels(i)); % Find elements which match current label
s(i,1) = sum(A(idx,1)); % Sum them
end
r = sortrows([s labels], -1); % Sort by decreasing sum
r(1,2); % Label corresponding to largest sum
r(2,2); % Label corresponding to second largest sum
编辑 accumarray
是一个内置函数,可以为您完成此操作。虽然我发现它的文档有点神秘。
答案 2 :(得分:0)
既然你的问题不是很清楚,而且我没有得到你指的是什么,我只是想猜你是针对这样的事情
q=sortrows(A,-1);
q=q(1:2,:);
将为q中的两个标签(右列)提供最大值(左列)。
如果这不是你想要的,请发表评论。
编辑:错误读取包含标签的列,已更正