スパイシーな日常をかみしめる

理系大学院生のほんのちょっと変わった日常

#16 パイソンの高速化(並列処理)

Pythonの高速化には,いくつかの方法があります.
そのなかで特に私のおすすめを紹介します.

1)ベクトル計算を積極活用
Pythonの重たい処理の一つとして,配列の要素に一つ一つアクセスする場合があります.
For文を複数ネストするような処理の場合は,出来るだけその構造を避けるのがおすすめ.
そのために,numpyやpandasのベクトル計算を積極活用しましょう.
例えば,pandasにて列Aと列Bの条件によって列Cの値が変わるとき,pd.loc[(条件),列C]=値といった,For文とIf文を組み合わせた操作ができる処理をつかう.
また,どうしても配列要素一つ一つにアクセスしなければならない場合は,applyを使うとよいです.


2)複雑な関数を高速な言語で書き換える.
Pythonのライブラリが早い理由は,ライブラリがより高速な言語 ( C言語のような)で書かれているからです.
そのため,重たい処理を自作のライブラリとして作成してしまえばより速くなります.
僕の場合はFortranで実施していました.


3)並列処理
maltiprocessing toolを使って,並列処理するやり方.
単純に倍速近くなる

3)その他
その他,こまごました高速化が可能.
例えば,for 文中でリストにappendするよりも,内包表記で書く方が早い.