メモとしてぼちぼち充実します。特に次の4点には注意が必要。
(1)NumPyは0ベース、SciLab,Rは1ベースなので、添え字が1つずれる
(2)SciLabは列ベクトルが基本、NumPyやRは行ベクトルが基本なので、1次元の数列から行列をつくるときに、転置の関係になる
(3)行列の総和、SciLabは演算方向を指定しsum(A,'r')
、Rは演算対象を指定colSum(A)
(4)SciLabの行列の積は定義通り、NumPyとRは要素毎の積
関連メモ
python ジャンプスタート
C,perl,PHP. JavaScript,Scilab,VHDL,pythonの比較
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較
##SciLab関連ドキュメントリンク
install
macOSでSciLabを動かすまで
SciNoteのオートコンプリートをとめたい
実践
SciLabでCSV読み込み
SciLabでGUIを使ってみる
Mac/Windows共用scilabスクリプト未公開
SciLabでフィルタを適用する未公開
プロットメモ未公開
プロットあれこれ未公開
他の言語と比較・書き換え
Scilab (NumPy) - plotの書き方
[配列と文字列処理の比較](https://qiita.com/0x20FE/items/ b6ea768692297b721951)
関数とオブジェクトの書き方メモ
Scilab,NumPy,R行列処理の比較
##注目ツール
利用分野 | ツール | 統合環境 | Mac | スクリプト | 工学分野利用例 | おすすめ解説記事 |
---|---|---|---|---|---|---|
数値処理 | SciLab | SciLab | ✅ | .sce script | フィルタ設計 制御シミュレーション | |
統計処理 | R | Rstudio | ✅ | R script | 統計,解析 | 舟尾 暢男,"The R Tips" |
深層学習 | NumPy | ✅ | .py | 深層学習,数値計算 | ||
汎用 | Excel | ✅ | VB | pivot table, fft |
対応表
式、値 | 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 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 0 2 … 8 |
[0:6] [0:2:8] |
np.arrange(0,8,2) |
0:6 seq(0,8,2) |
要素アクセス | 5番目 5〜10番目 |
vr(5) vr(5:10) |
||
■行列■ | ||||
行列 | 1 2 3 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) |
数列から 行列作成 |
matrix([1:6],2,3) | matrix(1:6,2,3,byrow=T) | ||
次元 | 2 | A.dim | ||
形 | 2行 3列 | size(A) | A.shape | |
行を 結合 |
1 2 3 4 |
[[1,2];[3,4]] cat(1,[1 2],[3 4]) |
cbind(c(1,2),c(3,4)) | |
列を 結合 |
[1] [2] [3] [4] |
[[1;3],[2;4]] cat(2,[1;3],[2;4]) |
rbind(c(1,3),c(2,4)) | |
行次元反転 | 3 4 1 2 |
flipdim([1 2;3 4],1) | ||
列次元反転 | 2 1 4 3 |
flipdim([1 2;3 4],2) | ||
行ベクトル反転 | 3 4 2 1 | flipdim([1 2 3 4],2) | ||
単位行列 | 1 0 0 1 |
eye(2,2) | diag(2) | |
対角行列 | 1 0 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 2 4 6 7 9 11 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) | |||
列総和 平均 |
5 7 9 | sum(A,"r") | colSums(A) colMeans(A) |
|
行総和 平均 |
6 15 |
sum(A,"c") | rowSums(A) 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) A .*. B |
A %x% B | ||
行列式 | det(A) | det(A) | ||
逆行列 | inv(A) | solve(A) | ||
固有値分解 | [V,E]=spec(A) | z<-eigen(A) z\\$values z\$vectors |
||
QR分解 | [Q,R]=qr(X) | qr(A) | ||
特異値分解 | [U,S,V]=svd(X) | svd(A) |
関数定義
式 | SciLab | NumPy | R | |
---|---|---|---|---|
function y=myf(x) y=戻り値 end function |
def myf(x): return 戻り値 |
myf<-function(x)戻り値 | ||
複数戻り値 関数定義 |
function [y,z]=myf(x) ... end function |
def myf(x): return y,z |
return(list(A=1,B=2)) | |
複数戻り値 呼び出し |
[y,z]=myf(x) | y,z=myf(x) |
書き方
式 | SciLab | NumPy | R | |
---|---|---|---|---|
継続行 | .. |
統計量
式 | SciLab | NumPy | R | |
---|---|---|---|---|
要約統計量 | min,1/4,median,mean,3/4,max | min(x); median(x); mean(x); max(x); |
summary(x) | |
度数分布 | bin 0,1,2,...10 | b=linspece(0,10,11); x=rand(1,50)*10; histplot(b,x); |
table(cut(x,c(0,10,20))) |
信号処理
式 | SciLab | NumPy | R | |
---|---|---|---|---|
フィルタ 適用 |
(1+z^-1) (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 | NumPy | R | |
---|---|---|---|---|
数 | "10" | string(10) | ||
連結 | "AB" | 'A'+'B' | ||
置換 | strsubst(s,'aaa','bbb') |