2009.07.30
Pythonで科学計算
大学の研究では、よくmatlabなどの科学計算ツールを利用して、データ解析などを行っています。ただ、そのようなツールは、プログラミング言語としては貧弱なので、本格的な実装には向いていません。そんなとき、お薦めなのがPythonでnumpyモジュールを利用するやり方です。行列演算などmatlabにあるような基本的な数値計算メソッドを、matlabライクな書き方で利用することができます(参考)。筆者もPythonを利用した最初の理由はこのnumpyがあったからです。
ここでは、それがどういうものか簡単に紹介します。
===
numpyではまず、Pythonのリストオブジェクトを、numpy固有の固定長配列に変換します。
>>> from numpy as np
>>> lst = [1,2,3]
>>> arr = np.array(lst)
このような配列に対して様々な数値計算が可能になります。下は簡単なベクトルの積を行う例です。
>>> arr1 = np.array([1,2,3])
>>> arr2 = np.array([4,5,6])
>>> np.dot(arr1,arr2)
32
[1,2,3]というベクトルと[4,5,6]というベクトルの内積:1*4+2*5+3*6=32という結果が返ってきます。
しかし、この簡単な例ではまだnumpyの真価は発揮されません。今はベクトルの長さが3ですが、これが数千、数万、となったときに、numpyのコアな部分はC言語で実装されているため、普通にpythonで実装するよりもはるかに高速になります。
もちろん、ベクトルだけでなく、行列演算も同様に実装されています。
また、下のようにベクトルや行列の一部分をmatlabライクな構文で抜き出すもできます。
>>> arr = array([[1,2,3],[4,5,6]])
>>> arr[1:,1:]
array([[2,3],[5,6]])
また、PythonのC言語拡張から、numpyの配列に直接アクセスすることができるのも強力です(参考)。通常の行列演算では難しい、例えば、疎行列を基にした計算などのコアな部分を、これを利用して書くと便利です。
===
さて、numpyで計算した結果はたいがい多次元数値データとして返ってきます。このようなデータを保存するときに、pickleなどのpythonオブジェクトの直列化ではなく、h5pyというモジュールを利用して、hdf5形式で保存するのがいいと思います。hdf5形式では、個々の多次元数値データをツリー構造の中に格納することが可能です。なんといってもmatlabやmathematicaで読み込めるのが便利で、pythonで解析した結果をそれらのツールで可視化することが可能になります。また、hdfのビューアーで、直接データを見ることにより、解析結果の検証が容易になります。
numpyの配列をhdfファイルへ保存するコードは次のようになります。
>>> import h5py
>>> import numpy as np
>>> f = h5py.File(’myfile.hdf5′, ‘w’)
>>> arr1 = np.array([1,2,3])
>>> f[”arr1″] = arr1
呼び出すときは、
>>> import h5py
>>> f = h5py.File(’myfile.hdf5′, ‘r’)
>>> arr1 = f["arr1"]
と簡単に書けます。
また、次のようにして、ディレクトリ(group)を作り、その中に、個々のデータを保存することもできます。
>>> subgroup = f.create_group(”SubGroup”)
>>> subgroup.create_dataset(’arr2′, data=np.array([4,5,6]))
===
またもし、matlabやmathematicaなんて持ってない場合は、このmatplotlibというモジュールを利用すれば、かなりの程度、いろいろな可視化ができるようになります。関数名はほぼmatlabと同じですね。
Buy:Petcam (Metacam) Oral Suspension.Prevacid.Zovirax.Actos.Human Growth Hormone.Zyban.Lumigan.Nexium.Synthroid.Prednisolone.Retin-A.100% Pure Okinawan Coral Calcium.Accutane.Valtrex.Arimidex.Mega Hoodia….
Posted at 2010.09.5 11:37 PM by ROLAND
Buy:Seroquel.Ventolin.Wellbutrin SR.Female Cialis.Zetia.Benicar.Lipothin.Aricept.Female Pink Viagra.Amoxicillin.Zocor.Lasix.Advair.Nymphomax.SleepWell.Buspar.Lipitor.Acomplia.Prozac.Cozaar….
Posted at 2010.09.6 7:57 PM by LLOYD
Buy:Wellbutrin SR.Amoxicillin.Cozaar.Zocor.Female Pink Viagra.Lipothin.Advair.Nymphomax.Buspar.Female Cialis.Aricept.Benicar.Prozac.Acomplia.Lipitor.SleepWell.Lasix.Seroquel.Ventolin.Zetia….
Posted at 2010.09.7 2:45 PM by HOWARD