火曜日, 8月 25, 2009

f2pyを使ってみた

Scipy.weaveも良いけどFortranで計算した方が速かったりしないかな?という疑問を解決すべく、f2pyも使ってみました。

やっぱりそれなりに落とし穴がありまして、f90で書くときは変数宣言時の精度指定にkind(0d0)みたいな書き方をするとこけます(参考 *1) orz

あとintent(out)とか指定して、

[f77]
subroutine foo(x,y)
   real,intent(in) :: x
   real,intent(out) :: y
   y = 2d0 * x
end
Python側でfoo(x,y)と呼び出すと「引数が多すぎるで」と怒られます(参照 *2)。
[python]
y = foo(x)
みたいに値を受け取らなければいけないようです。ちゃんとここいら(*3)を読んでからやるべきだったかも知れません。

肝心の計算速度ですが…ちょっと速くなりましたが、正直どっちでもいい感じです。

*1 http://cens.ioc.ee/projects/f2py2e/FAQ.html
*2 http://osdir.com/ml/python.f2py.user/2008-01/msg00002.html
*3 http://scipy.dip.jp/index.php?F2PY

0 件のコメント: