2016-08-08 8 views

答えて

3

maxは、アレイ内のあなたがすることができ、その後find最大の要素の値を返す場合は、行によってグループにそれらをaccumarrayを使用することができます。

ind = find(a(1, :) == max(a(1, :))) 
5

以下の溶液を一度任意のループの必要性を防止することで全体のマトリックスに演算を適用します。

あなたが最大行にそれぞれの行を計算して、eq==)を使用することができますが、それの行方向に各行のそれぞれの値を比較し、最大

a(row, :) == max(a(row, :)) 

スピードについては、bsxfunの呼び出しでこれをラップすることができます。

a = [1 2 2; 4 4 3]; 
out = bsxfun(@eq, a, max(a, [], 2)) 

% 0  1  1 
% 1  1  0 

これは、1が指定された行の最大値であったことを示す論理行列を生成します。インデックスが必要な場合は、findをこれに適用して行と列を取得できます。

[rows, cols] = find(out) 

、必要に応じ

accumarray(row, col, [], @(x){x}) 

% out{1} = 
%  
%  2 
%  3 
%  
% out{2} = 
%  
%  1 
%  2 
+1

「find」ソリューションよりもずっと高速です。ずっと最高です。 – Adriaan

+0

ありがとう、私はそれが速いと思うが、私はより簡単な答えを受け入れている。 –

+4

@SridharThiagarajanあなたは下位回答を選択することはできますが、少なくともあなたが選んだ前に投稿したMad Physicistを受け入れてください。また、実際に私の投稿を読んだら、私は簡単なアプローチについて言及します。私はどこに指示するのかを強調しました。 – Suever

1

私はそれが簡単だと思う。

row = aMatrix(rowNumber, :) 
find(row==max(row)) 

明らかに最初の方法は、(私の意見ではたくさんよりよい見えている)を2回同じ行を抽出することなく実行し

find(aMatrix(rowNumber, :)==max(aMatrix(rowNumber, :))) 

に凝縮され、第二の方法は、少数の変数を書き込みます。

関連する問題