Numba加速Python程序


眾所周知,Python和Java一樣是基於虛擬機的語言,並不是像C/C++那樣將程序代碼編譯成機器語言再運行,而是解釋一行執行一行,速度比較慢。使用Numba庫的JIT技術編譯以后,可以明顯提高程序的運行速度。

首先,使用PyCharm安裝Numba庫,在Project Interpreter界面可以安裝。

程序代碼:

import numpy as np
from numba import jit
import time

@jit
def sum_jit(arr):
    s_time = time.time()
    m = arr.shape[0]
    result = 0.0
    for i in range(m):
        result += arr[i]
    e_time = time.time()
    return (e_time-s_time)

def sum(arr):
    s_time = time.time()
    m = arr.shape[0]
    result = 0.0
    for i in range(m):
        result += arr[i]
    e_time = time.time()
    return (e_time-s_time)

def main():
    n = int(10.0*1e6)
    array = np.random.random(n)
    t1 = sum_jit(array)
    t2 = sum(array)
    print("Time with JIT:", t1)
    print("Time without JIT:", t2)

if __name__ == '__main__':
    main()

上面代碼的sum()和sum_jit()兩個函數完全相同,區別在於sum_jit()添加了@jit注解,表面該函數使用Numba JIT進行編譯以后再運行,而sum()是不編譯的運行。對main()中n的值取1×106~10×106,計算每個值兩個函數運行的時間,單位為Second,如下圖所示:

可以看到隨着運算量的線性增加,sum()的運行時間幾乎也是線性增加的,而sum_jit()的運行時間基本上保持不變,運算量的增加並沒有帶來影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM