MENU

Python: 利用numba加速Python代码

• September 22, 2019 • Read: 3153 • Knowledge,Python

利用Numba为python代码加速

numba库可以通过即使编译技术为,Python语言进行加速。以下的例子可以看到numba所带来的优势。用来测试的函数是一个求和矩阵和的函数,能够对二维矩阵进行其中元素的求和,采用for循环完成。numba库的加速,对于还有循环的代码,加速效果特别明显

未采用numba加速

import numpy as np
import numba as nb

def test_numpy(a):
    m, n = a.shape  # 获得这个矩阵两个维度的元素个数
    # 采用遍历的方式进行求和
    s = 0 # sum进行初始化,为0
    # 二维矩阵采用两个for循环完成
    for row in np.arange(m):
        for col in np.arange(n):
            s += a[row, col]
    return s

np.random.seed(1927)
A = np.random.randn(1000, 1000)
%%timeit
test_numpy(A)
275 ms ± 19.6 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

采用numba加速

@nb.jit(nopython=True)
def test_numba(a):
    m, n = a.shape  # 获得这个矩阵两个维度的元素个数
    # 采用遍历的方式进行求和
    s = 0 # sum进行初始化,为0
    # 二维矩阵采用两个for循环完成
    for row in np.arange(m):
        for col in np.arange(n):
            s += a[row, col]
    return s
%%timeit
test_numba(A)
1.13 ms ± 26.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

可以看出通过numba的加速,对同一函数而言,速度提升了约243倍。

@jit命令中,参数可以选择为空,numba会自动进行加速模式的选择,有nopython模式以及object模式,而nopython模式是最佳的加速性能,也是numba推荐的。@njit常被用于替代@jit(nopython=True)

对类方法加速的问题

在2019.04之前的anaconda部署的环境中,numba中的@jit可以直接对类的方法进行加速,但是之后的更新后 ,这种加速失效了。会出现错误的提示,目前还不知道是什么原因。

如果你觉得这些对你还有些收获!当然可以打赏我。

请点击右下方Tip进行打赏!

Last Modified: October 6, 2019
Archives Tip
QR Code for this page
Tipping QR Code