行列の特定の行に沿って最大のすべてのインデックスを見つける方法を教えてください。 max(a(1、:))は最初の最大値のみを返します!複数の最大値がある場合に行に沿って最大
Iが最大値(複数)であるすべての要素のすべてのインデックスを必要
行列の特定の行に沿って最大のすべてのインデックスを見つける方法を教えてください。 max(a(1、:))は最初の最大値のみを返します!複数の最大値がある場合に行に沿って最大
Iが最大値(複数)であるすべての要素のすべてのインデックスを必要
max
は、アレイ内のあなたがすることができ、その後find
最大の要素の値を返す場合は、行によってグループにそれらをaccumarray
を使用することができます。
ind = find(a(1, :) == max(a(1, :)))
以下の溶液を一度任意のループの必要性を防止することで全体のマトリックスに演算を適用します。
あなたが最大行にそれぞれの行を計算して、に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
私はそれが簡単だと思う。
row = aMatrix(rowNumber, :)
find(row==max(row))
明らかに最初の方法は、(私の意見ではたくさんよりよい見えている)を2回同じ行を抽出することなく実行し
find(aMatrix(rowNumber, :)==max(aMatrix(rowNumber, :)))
に凝縮され、第二の方法は、少数の変数を書き込みます。
「find」ソリューションよりもずっと高速です。ずっと最高です。 – Adriaan
ありがとう、私はそれが速いと思うが、私はより簡単な答えを受け入れている。 –
@SridharThiagarajanあなたは下位回答を選択することはできますが、少なくともあなたが選んだ前に投稿したMad Physicistを受け入れてください。また、実際に私の投稿を読んだら、私は簡単なアプローチについて言及します。私はどこに指示するのかを強調しました。 – Suever