私は2次元行列A(value, label)
を持っています。私は値の最大と2番目に大きな合計を持つラベルを探したい。たとえば:Matlab:第1次元の最大和を求め、第2次元でグループ化する
A = (1, 1;
2, 1;
3, 2;
4, 2;
5, 3)
この場合、結果は、私はMATLABでこれを行うことができますどのように二番目に大きい= 3、2 =最大すべきですか?
私は2次元行列A(value, label)
を持っています。私は値の最大と2番目に大きな合計を持つラベルを探したい。たとえば:Matlab:第1次元の最大和を求め、第2次元でグループ化する
A = (1, 1;
2, 1;
3, 2;
4, 2;
5, 3)
この場合、結果は、私はMATLABでこれを行うことができますどのように二番目に大きい= 3、2 =最大すべきですか?
あなたの質問は、超明確ではないと私はあなたが私を参照しているものを合計得ることはありませんので、あなたは2を与えるだろう、この
q=sortrows(A,-1);
q=q(1:2,:);
のようなものを目指していることをちょうどつもり推測ですqの中で最大の値(左の列)を持つラベル(右の列)。
これがあなたが探していたものでない場合は、ご意見ください。
はEDIT: 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
EDITaccumarray
あなたのためにこれを行います組み込み関数です。私はそれについてのドキュメンテーションがややわかりにくいが、
[b,m,n]=unique(a(:,2));
[val, idx]= sort(accumarray(n,a(:,1)),'descend');
b(idx(1:2))
出力は次のとおりです。
ans =
2
3