お久しぶりです。シニアTです。
いろいろ考えた結果、表題にたどり着きました。
いろいろ考えた結果、表題にたどり着きました。
PYTHONは、低級言語に負けないくらい高速なプログラムを書くことができるので、その話をします。
例えば、行列の各行の和を求めるには、下記の通りです。
from numba import njit,prange
@njit(parallel=True, fastmath=True)
def sum_1(x):
nr, nc = x.shape
res = np.zeros(nr)
for i in prange(nr):
for j in range(nc):
res[i] += x[i, j]
return res
@njit(parallel=True, fastmath=True)
def sum_1(x):
nr, nc = x.shape
res = np.zeros(nr)
for i in prange(nr):
for j in range(nc):
res[i] += x[i, j]
return res
頭の二行が、高速化にかかわる部分で、残りが、ほぼ普通の(らしくはないけど)PYTHONのプログラムです。
これを通常通りに実行するだけです。
これを通常通りに実行するだけです。
この職場のPCで、20000×20000の行列で実験すると、
①上記プログラム...144ms
②numpy(C等で実装された行列計算)...508ms
となり、負けないどころか、圧勝してしましました。(笑)
①上記プログラム...144ms
②numpy(C等で実装された行列計算)...508ms
となり、負けないどころか、圧勝してしましました。(笑)
numpyは、積算の精度等、いろいろ拘りがあるのだとは思いますが、驚くべき結果であることは間違いありません。
様々な細かい処理を、簡単に高速化できると、データの山との格闘も多少は快適なものになるでしょう。
次回も、PYTHONの予定です。