Scilab,NumPy,R行列処理の比較

メモとしてぼちぼち充実します。特に次の4点には注意が必要。
(1)NumPyは０ベース、SciLab,Rは１ベースなので、添え字が１つずれる
(2)SciLabは列ベクトルが基本、NumPyやRは行ベクトルが基本なので、１次元の数列から行列をつくるときに、転置の関係になる
(3)行列の総和、SciLabは演算方向を指定し`sum(A,'r')`、Rは演算対象を指定`colSum(A)`
(4)SciLabの行列の積は定義通り、NumPyとRは要素毎の積

*関連メモ*
[python ジャンプスタート](https://qiita.com/0x20FE/items/6f8b6d893b9c5c197c5b)
*C,perl,PHP. JavaScript,Scilab,VHDL,pythonの比較*
 [配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
   [関数とオブジェクトの書き方メモ](https://qiita.com/0x20FE/items/02e2a6d8380851272a2c)
  [Scilab,NumPy,R行列処理の比較](https://qiita.com/0x20FE/items/75622186ba8a0c6086ce)

##SciLab関連ドキュメントリンク
*install*
[macOSでSciLabを動かすまで](https://qiita.com/0x20FE/items/2ba5e60685816485ea4c)
[SciNoteのオートコンプリートをとめたい](https://qiita.com/0x20FE/items/cb17fda3f7456a807d41)

*実践*
[SciLabでCSV読み込み](https://qiita.com/0x20FE/items/dd6cbf94be0f2c20d002)
[SciLabでGUIを使ってみる](https://qiita.com/0x20FE/items/cf9cdad0e4be88714118)
[Mac/Windows共用scilabスクリプト]()未公開
[SciLabでフィルタを適用する]()未公開
[プロットメモ]()未公開
[プロットあれこれ]()未公開

*他の言語と比較・書き換え*
[Scilab (NumPy) - plotの書き方](https://qiita.com/0x20FE/items/311ac0e61a129e6a01fa)
 [配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
   [関数とオブジェクトの書き方メモ](https://qiita.com/0x20FE/items/02e2a6d8380851272a2c)
  [Scilab,NumPy,R行列処理の比較](https://qiita.com/0x20FE/items/75622186ba8a0c6086ce)

##注目ツール

|利用分野|ツール|統合環境|Mac|スクリプト|工学分野利用例|おすすめ解説記事|
|:--:|:--:|:--:|:--:|:--:|:--:|:--|
|数値処理|SciLab|SciLab|✅|.sce script|フィルタ設計 制御シミュレーション| |
|統計処理|R|Rstudio|✅|R script|統計,解析|[舟尾 暢男,"The R Tips"](http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html)|
|深層学習|NumPy||✅|.py|深層学習,数値計算||
|汎用|Excel||✅|VB|pivot table, fft||


<!-- [シムサーキット有限会社,"ビギナーのための科学技術計算ソフト（Scilab）の使い方講座"](http://www.simcir.co.jp/Scilab/Scilab_howtouse1.html) -->
## 対応表

||式、値|SciLab|NumPy|R|
|:--:|:--:|:--:|:--:|:--:|
||■スカラー■|
|複素数|2+3i|c=complex(2,3)||c<-2+3i|
|絶対値,偏角|　　|abs(c)||abs(c),Arg(c)|
|||real(c),imag(c),conj(c)||Re(c),Im(c),Conj(c)|
||■ベクトル■|
|基本||行|行|列|
|列方向|||||
|添え字開始||1|0|1|
|列ベクトル|2<br>3|vc=[2;3]|vc=np.array([2],[3])|vc<-c(2,3)
|行ベクトル|1 2|vr=[1,2]|vr=np.array([1,2])|
|数列作成|0 1 … 6<br>0 2 … 8|[0:6]<br>[0:2:8]|<br>np.arrange(0,8,2)|0:6<br>seq(0,8,2)|
|要素アクセス|5番目<br>5〜10番目|vr(5)<br>vr(5:10)|
||■行列■|
|行列|1 2 3<br>4 5 6|A=[1,2,3;4,5,6]|A=np.array([1,2,3],[4,5,6])|matrix(c(1,4,2,5,3,6),2,3)|
|数列から<br>行列作成||matrix([1:6],2,3)||matrix(1:6,2,3,byrow=T)|
|次元|2||A.dim||
|形|2行 3列|size(A)|A.shape||
|行を<br>結合|1 2<hr>3 4|[[1,2];[3,4]]<br>cat(1,[1 2],[3 4])||cbind(c(1,2),c(3,4))|
|列を<br>結合|[1] [2]<br>[3] [4]|[[1;3],[2;4]]<br>cat(2,[1;3],[2;4])||rbind(c(1,3),c(2,4))|
|行次元反転|3 4<br>1 2|flipdim([1 2;3 4],1)|
|列次元反転|2 1<br>4 3|flipdim([1 2;3 4],2)|
|行ベクトル反転|3 4 2 1|flipdim([1 2 3 4],2)|
|単位行列|1 0<br>0 1|eye(2,2)||diag(2)|
|対角行列|1 0<br>0 2|diag([1 2])||diag(c(1,2))|
|要素|A(1,2)|A(1,2)|A[0,1]|A[1,2]|
|行抽出|2行|A(2,:)|A[1]|A[2,]|
|列抽出|2列|A(:,2)||A[,2]|
|配列化||matrix(A,1,要素数)|A.flatten()||
|行列読み込み||fscanfMat('f.txt')||read.csv("f.csv")|-|
||■多次元配列■|
||1 3 5<br>2 4 6<br><br>7 9 11<br>8 10 12|||x<-array(1:12,dim=c(2,3,2))|
||■行列演算■|
|ベクトル内積|vr vc|vr*vc|np.sum(vr*vc)|vr %*% vc |
|ベクトル外積|vr x vc|||a %o% b|
|ベクトル総和|||np.sum(vc)||
|列総和<br>平均|5 7 9|sum(A,"r")||colSums(A)<br>colMeans(A)|
|行総和<br>平均|6<br>15|sum(A,"c")||rowSums(A)<br>rowMeans(A)|
|転置||vc'||t(A)|
|加算|A + B|A+B|A+B|A+B|
|積算|AB|A*B|np.dot(A,B)|A %*% B|
|スカラー積|3A|3*A|A*3|3*A|
|エレメント積||.*|A*B|A*B|
|エレメント商||./|||
|クロネッカー積||kron(A,B)<br>A .*. B||A %x% B|
|行列式||det(A)||det(A)|
|逆行列||inv(A)||solve(A)|
|固有値分解||[V,E]=spec(A)||z<-eigen(A)<br>z\\$values <br> z\\$vectors|
|QR分解||[Q,R]=qr(X)||qr(A)|
|特異値分解||[U,S,V]=svd(X)||svd(A)

### 関数定義
||式|SciLab|NumPy|R|
|:--:|:--:|:--|:--|:--|
|||function y=myf(x)<br> y=戻り値<br>end function|def myf(x):<br>return 戻り値|myf<-function(x)戻り値|
|複数戻り値<br>関数定義||function [y,z]=myf(x)<br>...<br>end function|def myf(x):<br>return y,z|return(list(A=1,B=2))|
|複数戻り値<br>呼び出し||[y,z]=myf(x)|y,z=myf(x)|

### 書き方
||式|SciLab|NumPy|R|
|:--:|:--:|:--|:--|:--|
|継続行||..|||

### 統計量
||式|SciLab|NumPy|R|
|:--:|:--:|:--:|:--:|:--:|
|要約統計量|min,1/4,median,mean,3/4,max|min(x);<br>median(x);<br>mean(x);<br>max(x);||summary(x)|
|度数分布|bin 0,1,2,...10|b=linspece(0,10,11);<br>x=rand(1,50)*10;<br>histplot(b,x);||table(cut(x,c(0,10,20)))|

### 信号処理 ###
||式|SciLab|NumPy|R|
|:--:|:--:|:--:|:--:|:--:|
|フィルタ<br>適用|(1+z^-1)<hr>(1-z^-1)|filter([1 1],[1 -1],x)|
|アップサンプル|1 0 2 0 3|xu(1:2:length(x))=x|
|ダウンサンプル|1 3 5 7 9|xd=x(1:2:length(x)|||
|FFT||fft(1,x)|||
|IFFT||fft(2,f)|||

### プロット
[Scilab - plotの書き方(メモ)](https://qiita.com/0x20FE/items/311ac0e61a129e6a01fa)

### 文字列
||式|SciLab|NumPy|R|
|:--:|:--:|:--:|:--:|:--:|
|数|"10"|string(10)||
|連結|"AB"|'A'+'B'||
|置換||strsubst(s,'aaa','bbb')|
<!--
### 画像
||式|SciLab|NumPy|R|
|:--:|:--:|:--:|:--:|:--:|
-->