« エスキュービズム、初の著作本が発売されました♪ 【EC-CUBE カスタマイズ本】 | Python + Django でURLにセッションを組み込む(携帯で使えるはず) »

2009.07.30

Pythonで科学計算

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをnewsingに追加

大学の研究では、よく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と同じですね。

Trackback URL

Comment & Trackback


CheapTabletsOnline.Com. Canadian Health&Care.Best quality drugs.No prescription online pharmacy.Special Internet Prices. Low price drugs. Buy drugs online

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….


CheapTabletsOnline.Com. Canadian Health&Care.No prescription online pharmacy.Best quality drugs.Special Internet Prices. High quality drugs. Order pills online

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….


CheapTabletsOnline.com. Canadian Health&Care.Best quality drugs.Special Internet Prices.No prescription online pharmacy. No prescription drugs. Buy drugs online

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….

Comment feed

Comment





XHTML: You can use these tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>