Matlab:求第一维的最大和,按第二维分组

Matlab:求第一维的最大和,按第二维分组,matlab,Matlab,我有一个二维矩阵a(值、标签)。我想找到具有最大和第二大值之和的标签。例如: A = (1, 1; 2, 1; 3, 2; 4, 2; 5, 3) 在这种情况下,结果应为最大值=2,第二大值=3。我怎样才能在MATLAB中做到这一点呢?既然你的问题不是很清楚,我也不知道你指的是什么,我猜你的目标是这样的 q=sortrows(A,-1); q=q(1:2,:); 这将给出两个标签(右栏)的最大值(左栏)在q 如果这不是你想要的,请评论 编辑:误读了包含

我有一个二维矩阵
a(值、标签)
。我想找到具有最大和第二大值之和的标签。例如:

A = (1, 1;
     2, 1;
     3, 2;
     4, 2;
     5, 3)

在这种情况下,结果应为最大值=2,第二大值=3。我怎样才能在MATLAB中做到这一点呢?

既然你的问题不是很清楚,我也不知道你指的是什么,我猜你的目标是这样的

q=sortrows(A,-1);
q=q(1:2,:);
这将给出两个标签(右栏)的最大值(左栏)在q

如果这不是你想要的,请评论


编辑:误读了包含标签的列,更正了,因为你的问题不是非常清楚,我不知道你指的是多少,我猜你的目标是这样的

q=sortrows(A,-1);
q=q(1:2,:);
这将给出两个标签(右栏)的最大值(左栏)在q

如果这不是你想要的,请评论


编辑:误读了包含标签的列,纠正了这样的错误

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
是一个内置功能,可为您完成此操作。尽管我觉得它的文档有点神秘。

类似的东西应该可以解决这个问题

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
[b,m,n]=unique(a(:,2));
[val, idx]= sort(accumarray(n,a(:,1)),'descend');
b(idx(1:2))
编辑
accumarray
是一个内置功能,可为您完成此操作。虽然我觉得它的文档有点神秘

[b,m,n]=unique(a(:,2));
[val, idx]= sort(accumarray(n,a(:,1)),'descend');
b(idx(1:2))
输出为:

ans =

 2
 3
输出为:

ans =

 2
 3