こんばんは。
東大松尾研のディープラーニング講座をコツコツを進めておりますが、Pythonになれるのに苦労しております。ということで、先日に引き続き、Octave使いがPythonへ乗り換えるときの注意点シリーズの第2弾として、scipy,pandasの使い方についてのメモです。
↓先日の記事はこちら
目次
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のほうがやや計算速度が速いらしい