find関数の使い方
Octaveにはfind()という関数がある。find()の基本的な構造は
IDX=find(X)
であるが、ここでXもIDXも一般的にはベクトルと思ってくれてよい*1。この関数の役割はこうだ:
find()関数はXの中から0でない要素の位置をIDXで返す。
例えばX=[1,0,2,0,3,4,0,5]とすると、0でない要素の位置はそれぞれ1番目、3番目、5番目、6番目、8番目となるので、IDX=[1,3,5,6,8]という返値が返ってくる。
octave:1>X=[1,0,2,0,3,4,0,5] X = 1 0 2 0 3 4 0 5 octave:2>find(X) ans = 1 3 5 6 8
したがって、このfind()の返値をXの列数に指定してあげれば、0でない値が返ってくることになる。
octave:3>X(find(X)) ans = 1 2 3 4 5
ここで「0以外の値」ではなく「ある数値以外の値」を返したい場合は、ある値をXから引いたベクトルをfind()に入れてあげればよい。すなわち:
octave:1>X=[1,4,1,4,2,1,3,5,6] X = 1 4 1 4 2 1 3 5 6 octave:2>X(find(X-1)) ans = 4 4 2 3 5 6
ちなみに、find()はXの中から0以外の要素の位置を返したが、ある値の要素の位置を返すには==を駆使すればよい。==だけでは以下のように、ある値の要素の位置を1、それ以外を0で返す。
octave:3>X==1 ans = 1 0 1 0 0 1 0 0 0
ここでfind()を用いて以下のようにすればよい。
octave:4>find(X==1) ans = 1 3 6
Octave環境:octave3.6.2_gcc4.6.2/Windows 7 Professional
*1:Xは行列でもよいことになっているが、実際にここに行列を入れて使うことは少ないと思われる。