我有一個2-D矩陣A(value, label)
。我想查找具有最大值和第二大值總和的標籤。例如:Matlab:找到第一維的最大總和,按第二維分組
A = (1, 1;
2, 1;
3, 2;
4, 2;
5, 3)
在這種情況下,結果應該是最大= 2,第二大= 3。我怎樣才能在MATLAB中做到這一點?
我有一個2-D矩陣A(value, label)
。我想查找具有最大值和第二大值總和的標籤。例如:Matlab:找到第一維的最大總和,按第二維分組
A = (1, 1;
2, 1;
3, 2;
4, 2;
5, 3)
在這種情況下,結果應該是最大= 2,第二大= 3。我怎樣才能在MATLAB中做到這一點?
因爲你的問題是不是超級清楚,我不明白你是指什麼總和我只是要去猜測,你的目標是這樣的事情
q=sortrows(A,-1);
q=q(1:2,:);
,這將給兩個q中具有最大值(左列)的標籤(右列)。
如果這不是你正在尋找的請評論。
編輯: Missread哪一列包含標籤,糾正
像這樣的東西應該做的伎倆。
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
是一個內置的功能,會爲你做到這一點。雖然我發現它的文檔有點神祕。
[b,m,n]=unique(a(:,2));
[val, idx]= sort(accumarray(n,a(:,1)),'descend');
b(idx(1:2))
輸出是:
ans =
2
3