outlier

建築士、プログラミング、ライフハック、etc.

OctaveからPythonへの乗り換え(その2)Scipy編

こんばんは。

 

東大松尾研のディープラーニング講座をコツコツを進めておりますが、Pythonになれるのに苦労しております。ということで、先日に引き続き、Octave使いがPythonへ乗り換えるときの注意点シリーズの第2弾として、scipy,pandasの使い方についてのメモです。

↓先日の記事はこちら 

www.be-outliers.com

 

Scipyとは

Scipyとは、Pythonのための科学計算ライブラリで、線形代数・統計処理・最適化・フーリエ変換・デジタル信号処理など、非常に多くの関数が用意されているものです。

 

Pythonを使う際には必須のライブラリといえます。以下では、松尾研ディープラーニング講座を参考に、Scipyの主要な関数をOctaveと比較します。

OctaveからScipyへの変換

逆行列の計算

行列A=[1,-1,-1 ; -1,1,-1 ; -1,-1,1 ] の逆行列をBとする場合、

Octave:B=inv(A)  または B=pinv(A) 

Scipy:B=scipy.linalg.inv(A)

行列式

行列Aの行列式dを求める場合、

Octave : d=det(A)

Python : scipy.linalg.det(A)

固有値・固有ベクトル

行列Aの固有値lambda・固有ベクトルvを求める場合、

Octave : [v , lambda] = eig(A)

Scipy :  lambda , v = scipy.linalg.eig(A)

※OctaveとScipyで固有値・固有ベクトルの順序が逆になっているので、注意。

最適化

最適化は色々バリエーションがありますが、一番簡単なものとして、f(x)=x^2+2x+1とし、f(x)=0となるようなxを探索する場合、

(Octave)

function y=sample_function(x)

y=x^2+2*x+1;

endfunction

fsolve("sample_function",0)

※fsolveの第1引数で関数名(今回はsample_function)を指定するとき、ダブルクオテーション”ではさむ必要あり

(Scipy)

def sample_fucntion(x):

     return ( x**2+2*x+1 )

from scipy.optimize import newton

newton(sample_function,0)

 

フーリエ変換、逆フーリエ変換

データ列xがあるとき、そのフーリエ変換FXは、

Octave : FX=fft(x)

Scipy : FX=scipy.fftpack.fft(x)

また、逆フーリエ変換は、

Octave: x=ifft(FX)

Scipi : x=scipy.fftpack.fft(FX) *1

 

ということで、Scipyにおける主要な関数とOctaveとの違いについてのメモでした。

*1:Pythonの場合、NumpyでもFFTが計算できるが、Scipyのほうがやや計算速度が速いらしい