1

浮動小数点数のベクトルがあるとします。それを呼び出しますx

通常、その最大数が必要な場合はx、matlab 関数を呼び出すことができますmax(x)

ただし、最大数が必要であるが、他のベクトルで指定されているベクトル内の特定のインデックスを除外するとします。

これを行う最も簡単な方法 (および C で行う方法) は、2 番目のベクトルにあるインデックスをスキップしながら、ベクトルをループして最大値を更新し続けることです。つまり、最大値の線形検索を行い、不要なインデックスをスキップします。

ただし、この問題を解決するために、Matlab でより一般的な方法があるのではないかと思います。

4

2 に答える 2

2

ベクトル/行列を論理インデックスでスライスするのが通常の方法です。

http://blogs.mathworks.com/steve/2008/01/28/logical-indexing/

すでにインデックスを持っているように聞こえるので、次のように単純に論理インデックスに変えることができます。

exclude = [ ... ];
include = ones(size(x));
include(exclude) = 0;

max_m = max(x(include));
于 2013-05-20T05:07:40.870 に答える
1

Paddymaxのソリューションは、値のみが必要な場合は問題ありません。ただし、最大値のインデックスも必要な場合は、もうできません

[max_m max_m_i] = max( x(include) ); 

インデックスmax_m_iは縮小された配列に対して相対的であるため、元の配列へのインデックスではx(include)ありませんx

これを回避するには、論理インデックスを使用できます

include = true( size(x) );
include( exclude ) = false;
[max_m max_m_i] = max( x .* include - inf .* ( ~include ) ); 

このようにして、除外された場所を に設定し-infてそこにあるようにします (インデックスが破損しないようにします) が、 として選択されることはありませんmax

于 2013-05-20T05:19:16.650 に答える