2012-01-20 22 views

答えて

0

あなたの質問は、超明確ではないと私はあなたが私を参照しているものを合計得ることはありませんので、あなたは2を与えるだろう、この

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

のようなものを目指していることをちょうどつもり推測ですqの中で最大の値(左の列)を持つラベル(右の列)。

これがあなたが探していたものでない場合は、ご意見ください。

はEDIT: 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 

EDITaccumarrayあなたのためにこれを行います組み込み関数です。私はそれについてのドキュメンテーションがややわかりにくいが、

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

出力は次のとおりです。

ans = 

2 
3 
関連する問題