numpy

python数値計算という無謀なことを試している。
numpyパッケージを利用すると、arrayでお手軽に計算できるのがよい。でも遅い。
とはいえ、psycoというリアルタイムコンパイラ?的なもの出てきている。どーしても速くしたい部分だけCで書くことも可能だ。案外いけるんじゃないかと思う。実際、こんなかんじで使ってる研究者を時々見かける。

自分用メモ。

numpyのaverage()は遅い。sum()とsize*1を使って計算する方が倍くらい速い。なんでだろ。とりあえず「average()は使うな!」ということにしておく。(arrayサイズが小さいせいかもしれない。)

追記

こんなコードを書いて、profileで計ってみた。

from numpy import *

def test_average():
    x = arange(10000.0)
    for i in xrange(10000):
        average(x)

def test_non_average():
    x = arange(10000.0)
    for i in xrange(10000):
        sum(x)/x.size

こういう結果に(Athlon64 3700+)。

  • average()使用: 1.67秒
  • sum(), sizeで代用: 0.98秒

後者も十分たるそうな操作なのに有意差がでた。numpy1.0b4にて。
これCだとどれくらいになるんだろ。

*1:ちなみに len()よりsizeのほうが微妙に速い気がする