I am Charmie

メモとログ

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); なんてすると,楽.最大値を持つ要素が複数あった時には,要素番号が若いものが選ばれるはず.