blog2019-02-16Numbaを用いたPython/Numpyの高速化pythonまえがき機械学習関連のプロジェクトではPythonを使う人が多いと思うのですが、Pythonでの処理って遅いですよね。Tensorflowでの学習などにおいてはPython側で計算をしているわけではないので大丈夫なのですが、前処理の際などにPythonの実行速度の遅さがとても気になります。コンパイラ言語とスクリプト言語を比べるのは酷ですが、「C++なら数秒で終わるのになあ」という処理も数分かかってしまったりします。C++のプログラムに匹敵するほどの速度を出すのは無理ですが、できるだけ高速化したいですよね。そのための方法はいろいろあるのですが、今回はNumbaというJITコンパイラを用いる方法を紹介したいと思います。code.「Python/Numpyコード(の一部)を、高速な機械語に変換するためのオープンソースJITコンパイラ」ってことみたいですね。細かい特徴としては以下のような感じです。関数にデコレータをつけるだけで動作するNumpyの配列や関数を用いた処理に特化しているランタイム時に、最適化された機械語を作成して実行してくれるNumbaを利用するためにPythonのインタープリターを変えたり、コードの実行前にコンパイルするようにしたりする必要がないCPU/GPUを用いた並列計算のための機能もある実際に使ってみる高速化前のコード以下のような関数があったとします。ような(長さがarrより1短い)配列を返します。