Monday 16 January 2012

scilab-making the most of it

行列演算が速い scilab.ただ,どうしても if とか使うと for 文入れたくなるよなぁと思ってたのだが,
多分今見つけた3つのことは沢山のケースで行列演算だけでのプログラムを可能にしてくれる.
1つは見つけたというわけではなく,そこにいたけど有用性に気づいてなかったって話.

その1つ目は前にも書いた Boolean の辺り.
これは行列に対しても使え,例えば
p=[1;-2;5];
s = p<0
によっては[F;T;F] が返される,ということ(これは一応知ってた,はず).

もう1つは,行列は,ベクトルをその添字として取ることができるということ.
先程のに続いて,
ind=[1;3];
p(ind)=p(ind)+100;
を計算すれば,p は [101,-2,105] となる.案外革命的.

さ・ら・に これらと組み合わせておそらく素晴らしい威力を発揮するのは,今日見つけた find.

find indices of boolean vector or matrix true elements, と help browser には書いてあり,
boolean, find, そしてその find の結果を添え字として行列に対して用いれば,
行列の要素1つ1つに対する条件分岐をもった操作が可能になるわけだ.
これは使いやすそう.そして使いどころも多そうである.
ちょっとプログラム上手間がかかるので,もう少しうまいやり方も有るのかもしれないが.

No comments:

Post a Comment