2019年7月5日金曜日

Numba

奥村さんが,奥村さんに,Numbaを勧めていたので,調べてみた。Pythonの関数を実行時にJITコンパイルして最大200倍高速化するとのこと。具体例がMyEnigmaのブログ記事にあった。検証用コードは次のようなものだ。自分の環境では,pip3 install numbaでインストールできてしまったが,上記記事を参考にしたほうがよいかもしれない。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#! /usr/local/bin/python3
# -*- coding: utf-8 -*-

##from numba import jit
from numpy import arange
import time

##@jit
def sum2d(arr):
    M, N = arr.shape
    result = 0.0
    for i in range(M):
        for j in range(N):
            result += arr[i, j]
    return result

start = time.time()
a = arange(100000000).reshape(10000, 10000)
print(sum2d(a))
elapsed_time = time.time() - start
print ("elapsed_time:{0}".format(elapsed_time) + "[sec]")
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

##の2行をオン(test2.py)にするか,オフ(test1.py)にするかで次の結果を得た。
マシンは非力な,MacBookAir 13-inch Late2010

 ./test1.py
4999999950000000.0
elapsed_time:75.88523197174072[sec]
 ./test2.py
4999999950000000.0
elapsed_time:5.047018051147461[sec]

うーん,200倍ではなくて,25倍だった。

0 件のコメント: