Showing posts with label help-browsing. Show all posts
Showing posts with label help-browsing. Show all posts

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つに対する条件分岐をもった操作が可能になるわけだ.
これは使いやすそう.そして使いどころも多そうである.
ちょっとプログラム上手間がかかるので,もう少しうまいやり方も有るのかもしれないが.

Wednesday, 30 November 2011

scilab help browsing #1

scilab の help コマンドを順に見ていって勉強という試み.

Boolean variables.
例えば
[1,2]==[1,4]
とすると,
T F
が返される.また
a=[1,2;3,4]==[1,5;2,4]
とすると,
a=
  T F
  F T 
 となる.ここで b=~a とすると
b=
 F T
 T F
.なお,c=zeros(2,2); c~=a とすると結果は ans = F.
and は &, or は |, not は ~ で表される. C++と微妙に紛らわしい.
また,TやFは演算上 1,0 と同じ結果になるようだが,先程の例で
b==[0,1;1,0]
 には F が返される. 
また,他の使い方として( help より抜粋),
"For instance a([%T,%F,%T],:) returns the submatrix made of rows 1 and 3 of a. "

_____________________________________________________________
matrix の extraction.
さっきの最後の例で おっ とおもって help を探ってみると,やっぱりベクトル使って成分指定もできた.
a=2:2:200;
b=[2,4,6];
c=a(b)
 は
c=
  4. 8. 12.
 を返す.ついでに, c=[b;b] は [2,4,6;2,4,6] と一緒になる.
______________________________________________

continue
for 文や while 文の途中で,その loop の残りを飛ばして次の itelationに行きたい場合.
例えば
for k=1:20,
     if modulo(k,2)==0 then continue;
     end;
k
end;
 で,奇数が順に表示される.この場合は else とか ~ で代用ができるけど,場面によっては便利に使えそうである.
_______________________________________________________
こっからは短いのでまとめて.

edit(functionname[,linenumber])
で関数を編集できる.やってみたら今の環境では scinotes が立ち上がった.
ショートカットとして便利かも?しかしエディタ使ってるなら別に要らん気もする

exists (name[,where])
で変数が定義されてるかのチェック.定義されてたら1,なかったら0 を返す.
option で  'l' (local), 'n' (nolocal) ,'a' (all) によって場所を指定できる.default は a .

matrix(v,n,m)
行列v をn行m列に組み替える.どっちかの値に -1 を入れると適切な値を当てはめてくれる.
n,mは数字の組かあるいは[n,m]という vector でもいけるようだ.
_______________________________________________________________________________
なんぼか今すぐ使わなさそうなのは飛ばしてる.
ちょろちょろいろんな人と仲良くなりたいものですなー