2017-04-11 11 views
2

各行に検索インデックスを最大値にしたい。行に最大値が複数ある場合は、両方のインデックスを保存します。例えば行列の各行のすべての最大値の行/列を見つける

X = [5 6 8 
    1 2 3 
    4 4 0]; 

そして、私は

inds = [1 3 
     2 3 
     3 1 
     3 2]; 

インデックスを必要とする私は、関数を使用していたmaxが、この機能は、唯一のインデックスが保存されます。

答えて

3

maxを使用して各行の最大値を計算し、各行の要素をmaxの行と比較すると、bsxfuneqを使用することができます。次に、これらの最大値の行/列の位置を見つけることができます。そこに転置を使用して(.')、期待どおりの出力が得られるようにします。

[c,r] = find(bsxfun(@eq, d, max(d, [], 2)).') 
output = [r,c]; 
0

それを行うための別の方法は、maxrepmatを使用することです。 まず、あなたはそれがあなたの入力と同じ次元を持ち、入力

logicalMaximum=repmat(rowMaximum,1,size(X,2))==X; 

そして最後にあなたにそれを比較するように、そして、あなたは最大を複製各行の最大値は

rowMaximum=max(X,[],2); 

を使用して検索しますたくは

[columns,rows]=find(logicalMaximum); 
result=[rows,columns]; 
+0

ご希望のインデックスには、この論理配列に変換されないことは、HTT( 'bsxfun'を示す' eq' [この大規模な答え]のためrepmat' '上で提供している極端な高速化が注目に値しますp://stackoverflow.com/a/29719681/670206) – Suever

関連する問題