各行に検索インデックスを最大値にしたい。行に最大値が複数ある場合は、両方のインデックスを保存します。例えば行列の各行のすべての最大値の行/列を見つける
:
X = [5 6 8
1 2 3
4 4 0];
そして、私は
inds = [1 3
2 3
3 1
3 2];
インデックスを必要とする私は、関数を使用していたmax
が、この機能は、唯一のインデックスが保存されます。
各行に検索インデックスを最大値にしたい。行に最大値が複数ある場合は、両方のインデックスを保存します。例えば行列の各行のすべての最大値の行/列を見つける
:
X = [5 6 8
1 2 3
4 4 0];
そして、私は
inds = [1 3
2 3
3 1
3 2];
インデックスを必要とする私は、関数を使用していたmax
が、この機能は、唯一のインデックスが保存されます。
max
を使用して各行の最大値を計算し、各行の要素をmax
の行と比較すると、bsxfun
とeq
を使用することができます。次に、これらの最大値の行/列の位置を見つけることができます。そこに転置を使用して(.'
)、期待どおりの出力が得られるようにします。
[c,r] = find(bsxfun(@eq, d, max(d, [], 2)).')
output = [r,c];
それを行うための別の方法は、max
とrepmat
を使用することです。 まず、あなたはそれがあなたの入力と同じ次元を持ち、入力
logicalMaximum=repmat(rowMaximum,1,size(X,2))==X;
そして最後にあなたにそれを比較するように、そして、あなたは最大を複製各行の最大値は
rowMaximum=max(X,[],2);
を使用して検索しますたくは
[columns,rows]=find(logicalMaximum);
result=[rows,columns];
ご希望のインデックスには、この論理配列に変換されないことは、HTT( 'bsxfun'を示す' eq' [この大規模な答え]のためrepmat' '上で提供している極端な高速化が注目に値しますp://stackoverflow.com/a/29719681/670206) – Suever