2012-01-20 77 views

回答

0

因爲你的問題是不是超級清楚,我不明白你是指什麼總和我只是要去猜測,你的目標是這樣的事情

q=sortrows(A,-1); 
q=q(1:2,:); 

,這將給兩個q中具有最大值(左列)的標籤(右列)。

如果這不是你正在尋找的請評論。

編輯: Missread哪一列包含標籤,糾正

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
[b,m,n]=unique(a(:,2)); 
[val, idx]= sort(accumarray(n,a(:,1)),'descend'); 
b(idx(1:2)) 

輸出是:

ans = 

2 
3 
相關問題