memoryfolder

メモです

numpyを高速化するならまずnumexprを使ってみよう

 

光学系実験のためにnumpyを使って画像解析+色々な計算をしています。

どうしてもスピードがほしいとなったのでCythonを使って高速化してましたが、もっと手軽に試せる方法がありました。 

GitHub - pydata/numexpr: Fast numerical array expression evaluator for Python, NumPy, PyTables, pandas, bcolz and more

 

*, +, sin() などarrayのelement-wise operationをCの実装で高速化してくれるモジュールだそうです。

1000*1000の画像を扱う計算が多々あったので使ってみたところ、簡単に5倍程度になりました。forループなどが入っているならCythonにするべきかと思いますが、簡単に高速化を試したいなら使ってみてもいいと思います。

 

使用例は

>>> import numexpr as ne
>>> x = np.arange(1000)
>>> X,Y = np.meshgrid(x,x)
>>> Z = ne.evaluate("X**2+Y**2",local_dict={'X':X,'Y':Y}) 

sin, sinh, absなどの簡単な関数は入ってるし、部分的に最適化するのに向いてそうです