6

C現在、次のコードで行列とそのインデックスの最大値を見つけることができます。

[max_C, imax] = max(C(:));
[ypeak, xpeak] = ind2sub(size(C),imax(1));

マトリックスのサブセットを呼び出しましょうC_sub

の最大値を見つけたいのですが、C_subその最大値のインデックスも知りたいですC

簡単な問題のようですが、困惑しました。

ご協力いただきありがとうございます!

4

5 に答える 5

2

それ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);
于 2011-01-28T22:22:36.603 に答える
1

の最大値のインデックスがわかっていて、内C_subの位置がわかっている場合は、それらを単純に加算して(Matlabインデックスの場合は1を減算して)、に関連する最大値のインデックスを取得できます。C_subCC

于 2011-01-28T21:45:47.667 に答える
1

私はかつて同様の問題を抱えていたので、これを行うための小さなユーティリティを書きました。ファイル交換でMin2 と Max2を見つけます。これらのツールを使用すると、特定の行列の行や列のサブセットを指定して検索できます。

あなた自身のために同じことをしてください。MATLAB でツールが必要になるたびに、それを作成します。すぐに、自分の特別なニーズに合わせて調整されたツールの素晴らしいツールボックスを構築することになります。もちろん、最初にファイル交換を調べてください。必要なものがすでにそこに書かれて投稿されている可能性が高いからです。

于 2011-01-29T01:32:55.947 に答える
0

どうですか:

mask = nan(size(C));
mask(C_sub_indices) = 1;
[max_C, imax] = max(C .* mask);

そのコードでは、は、生成されたものC_sub_indicesに適用されるインデックス式です。がの部分行列でない場合(たとえば、行または列を再配置する場合)、このコードは機能しない可能性があります。CC_subC_subC

于 2011-01-28T21:50:39.700 に答える