Numba加速Python程序

众所周知,Python和Java同样是基于虚拟机的语言,并非像C/C++那样将程序代码编译成机器语言再运行,而是解释一行执行一行,速度比较慢。使用Numba库的JIT技术编译之后,能够明显提升程序的运行速度。dom

首先,使用PyCharm安装Numba库,在Project Interpreter界面能够安装。函数

程序代码:spa

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,以下图所示:code

能够看到随着运算量的线性增长,sum()的运行时间几乎也是线性增长的,而sum_jit()的运行时间基本上保持不变,运算量的增长并无带来影响。blog

相关文章
相关标签/搜索