MatLabのfind

find関数ではまった.

findは入力配列内の0ではない要素を示すインデックスを返す.
例えば a=[1 2 3 4]; find(a = max(a))
とすると,”4″を返す.
あくまでも非零要素を示すインデックスを返すため,非零要素が複数ある時は,複数のインデックスを返してくる.
つまり, a=[1 3 3 4]; find(a = max(a))
とすると,”2 3″と返してくる.
てっきり一つの要素のみを返す関数だと思っていたので,最大値探索のループが延々抜けられないというトラップにはまってしまった・・・

ではどうすれば良いかと言うと,それは最大値を持つ要素が複数見つかった時にどうしたいか?による.例えば,基本的にはそのようなケースは想定していない場合は,
a=[1 3 3 4];
tmp = find(a = max(a));
result = tmp(1);
なんてすると,楽.最大値を持つ要素が複数あった時には,要素番号が若いものが選ばれるはず.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s