NumbaでPythonプログラム高速化
『幌延地域を対象とした10mグリッド数値標高モデルを用いた精密地形解析図の作成』を参考に、DEMから斜面方位を算出するためのプログラムをPythonで作成していたのですが、素のままのPythonでは実行速度はかなり遅かったです。
Pythonの実行速度改善方法はいくつかありますが、今回は『Numba』というライブラリを使用して、実際に高速化できたので紹介させていただきます。
インストール
管理者権限でPowershellを起動して、次のコマンドを実行します。
pip install numba
インストールはこれで終わりです。
プログラムにNumbaを適用する
①例えば、下記のコードの赤字の関数を高速化するには...
for y in range(1, nrow - 1) : for x in range(1, ncol - 1) : if dem_check4(self.__dem, x, y, self.__nodata) == False: continue if x == 1: dx, dy = self.__dxdy(grs80, x, y) dem_hoi(self.__dem, x, y, dx, dy, result)
②numbaをインポートします
# -*- coding: utf-8 -*-
import numpy as np
import numba
....
③各関数の先頭に『@numba.jit』を記述します
@numba.jit def dem_check4(dem, x, y, nodata): if dem[y][x-1] == nodata: return False if dem[y][x+1] == nodata: return False .... @numba.jit def dem_hoi(dem, x, y, dx, dy, result): Hx = (dem[y-1][x-1] + dem[y][x-1] + dem[y+1][x-1] - (dem[y-1][x+1] + dem[y][x+1] + dem[y+1][x+1])) / (3 * dx) Hy = (dem[y+1][x-1] + dem[y+1][x] + dem[y+1][x+1] - (dem[y-1][x-1] + dem[y-1][x] + dem[y-1][x+1])) / (3 * dy) ....
numbaを使ってみた結果
①どのくらい速くなったのか、試しに富士山周辺の斜面方位図を作成しました。
numba適用前の実行時間は350秒でした。
numba適用後の実行時間は19秒でした。
仕方ないけど、やはりPythonは遅い
ものすごく速くなったなぁと感じたのですが...
②QGISの機能で傾斜方位を算出すると、なんと約1秒でした。
私のプログラムに何か問題があるのかもしれません...。
C# + gdal_csharpで同じプログラムを作ってみたのですが、やはり1秒程で処理が終わります。
どうしてもPythonを使いたい + Numbaをインストールできる環境の方は、Numbaを試してみてください。特に拘りが無い方は、他の言語の使用を検討した方が良いと思います。
最後までご覧頂き、ありがとうございました