C
現在、次のコードで行列とそのインデックスの最大値を見つけることができます。
[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));
マトリックスのサブセットを呼び出しましょうC_sub
の最大値を見つけたいのですが、C_sub
その最大値のインデックスも知りたいですC
。
簡単な問題のようですが、困惑しました。
ご協力いただきありがとうございます!
それC_sub
がによって作成されたとしましょう
C_sub = C(rows,cols);
ここでrows
、およびcols
はインデックスのベクトルです。まだ行っていない場合は、それらrows
とベクトルを再利用できる場所に保存します。cols
[max_C_sub, ind_C_sub] = max(C_sub(:));
[ypeak_sub, xpeak_sub] = ind2sub(size(C_sub), ind_C_sub);
xpeak = cols(xpeak_sub);
ypeak = rows(ypeak_sub);
または、rows
および/またはcols
がインデックスのベクトルではなく論理のベクトルであった場合は、を使用してそれらを変換しfind
、上記のように進めることができます。
rows_ind = find(rows_logical);
の最大値のインデックスがわかっていて、内C_sub
の位置がわかっている場合は、それらを単純に加算して(Matlabインデックスの場合は1を減算して)、に関連する最大値のインデックスを取得できます。C_sub
C
C
私はかつて同様の問題を抱えていたので、これを行うための小さなユーティリティを書きました。ファイル交換でMin2 と Max2を見つけます。これらのツールを使用すると、特定の行列の行や列のサブセットを指定して検索できます。
あなた自身のために同じことをしてください。MATLAB でツールが必要になるたびに、それを作成します。すぐに、自分の特別なニーズに合わせて調整されたツールの素晴らしいツールボックスを構築することになります。もちろん、最初にファイル交換を調べてください。必要なものがすでにそこに書かれて投稿されている可能性が高いからです。
どうですか:
mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);
そのコードでは、は、生成されたものC_sub_indices
に適用されるインデックス式です。がの部分行列でない場合(たとえば、行または列を再配置する場合)、このコードは機能しない可能性があります。C
C_sub
C_sub
C