cythonを用いた行列計算の高速化について
- Pure Python
- Python + Numpy
- Cython + Class + Malloc
- Cython + Function
- Cython Function + Typed Memoryviews and Raw Pointer
- Cython Class + Typed Memoryviews
[結果]
- 2 function calls in 100.808 seconds
- 2 function calls in 0.090 seconds
- 106 function calls in 17.667 seconds
- 3 function calls in 0.522 seconds
- 5 function calls in 0.209 seconds
- 203 function calls in 0.870 seconds
当然のようにNumpyが最速である。
従って、行列計算はNumpyを使え!(OpenBLASかGotoBLASでマルチコア化)となる。
他方、次位となるのは5である。まあ、データ配列にポインターでアクセスしたので、早くなって当然なのだが、コードが読みづらい?
どうしてもClassを使い場合は6のようにすればよいだろう。
[参考]
・NumPyが物足りない人へのCython入門
http://www.slideshare.net/lucidfrontier45/cython-intro
https://github.com/tokyo-scipy/archive/tree/master/003/cython_intro/final
・Memoryview Benchmarks
http://jakevdp.github.io/blog/2012/08/08/memoryview-benchmarks/