numpy、SciPy、matplotlib
Pythonは科学計算にもよくつかわれるようだ。
科学者に必要なpythonモジュールはなにか
科学者のための Python 入門
とりあえず、Python本体に加えて以下のモジュールをインストールしてみる。
- Python
- SetupTools モジュールを簡単インストールできる
- numpy 行列などを扱える
- SciPy 数値計算など
- Matplotlib: Python plotting — Matplotlib 3.0.3 documentation グラフプロットなど。easy_installでインストール
- PIL 画像処理ライブラリ。easy_installでインストール
- http://ipython.scipy.org/moin/:pyreadline IPythonで使用するモジュール
- IPython インタラクティブシェル。easy_installでインストール
準備
Pythonはインストーラーで簡単にインストールできる。最新はPython 3.0だが使いたいモジュールが対応していないので、Python 2.5.2を選ぶ。
次に、SetupToolsをインストールする。同じくインストーラーでインストールする。SetupToolsは、easy_installというモジュールのダウンロードからインストールまでを自動でするコマンドが含まれる。
SetupToolsインストール後に、PATHを通しておく必要がある。マイコンピューター右クリック→プロパティ→詳細設定→環境変数→PATHに「C:\Python25\Scripts;C:\Python25;」を追加する。
モジュールをインストール
- numpy
- SciPy
- pyreadline
は、EXEのインストーラーでインストールする。easy_installの場合コンパイルが必要になるからだ。
pyreadlineはIPythonのサイトからダウンロードできる。
- matplotlib
- Python Image Library
- IPython
は、easy_installでバイナリをダウンロード、インストールできた。
コマンドシェルにて
easy_install matplotlib easy_install PIL easy_install IPython
と入力する。
試してみる
コマンドシェルにて
ipython -pylab
import math,numpy,matplotlib,scipy t=linspace(0,1,1024); y=sin(2*pi*10*t); plot(t,y) title 'Sin Plot' xlabel 'Time[s]' ylabel 'Amplitude'
けっこう使えそうだ。
Scilab(Matlabも)は、言語仕様が独特すぎてプログラムが読みにくい書きにくい印象があったが、Pythonならば可読性がよいプログラムが書けそうだ。
追記
http://www.enthought.com/に、科学計算に使うモジュール一式がある。必要に応じてサポート付きのライセンスもあるようだ。プロユースにも使えそう。
Pythonで連続ウェーブレット解析
swanという連続ウェーブレット解析のモジュールがあった。
swan-0.5.4a.tar.gzを試してみる。
必要なモジュール
Gtkは最新版2.12.9を入れた。
PyGtkはバイナリからインストール。
swanはアーカイブを展開して、
python setup.py install
とする。ただし、Windowsの場合はそのままではインストールできないので、
setup.cfgを以下のように書き換えてから実行する。
# very basic config [install] prefix=C:\Python25 optimize=2
インストール後にC:\Python25\Scriptsに「swan」というファイルができるので
move swan swan.py
としておく。
試す
2. Simple usageを見ながら
まずは信号をつくる。「ipython -pylab」で起動して
import math,numpy,scipy,matplotlib Fs = 65.0 time = arange(0,16,1/Fs) signal = sin(2*pi*1.2*time) + cos(2*pi*3.7*time) save('signal.dat', signal)
実行はコマンドプロンプトから
swan.py -s 65 signal.dat
pycwtのみを使ったプログラム
swan: some visible examplesにあるように、GUIなしでプログラムを書いてもよい。
import pylab as p import iwavelets.pycwt as w Fs = 65.0 time = p.arange(0,16,1/Fs) signal = p.sin(2*p.pi*1.2*time) + p.cos(2*p.pi*3.7*time) freqs=p.arange(0.1,5,0.025) fc=1.5 r=w.cwt_f(signal,freqs,Fs,w.Morlet(fc)) rr=r.real**2+r.imag**2 p.imshow(p.flipud(rr),aspect='auto',extent=(time[0],time[-1],freqs[0],freqs[-1])) p.xlabel('Time[s]') p.ylabel('Frequency[Hz]') p.show()
つかえそうだ。