【Python模块介绍使用】Numba优化Python性能

  • Post author:
  • Post category:python


✨博文作者

wangzirui32


💖 喜欢的可以 点赞 收藏 关注哦~~

👏 我的第156篇原创作品

👉本文首发于CSDN,未经许可禁止转载


😎 hello,大家好,我是wangzirui32,今天我们来学习如何使用Numba优化Python性能,开始学习吧!



1. Numba简介

Numba是Python的即时编译器,当你调用函数时,函数代码将转换为机器码,以你的本机机器码速度运行,可以大大提高代码的运行速度。



2. Numba安装

Numba只需要使用

pip

命令安装,如下:

pip install numba

安装无报错即成功。



3. 示例



3.1 一个例子

我们举一个求解1000里有多少个质数的例子,代码如下:

import time

def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

def prime_in(n):
    primes = []
    for i in range(2, n+1):
        if is_prime(i):
            primes.append(i)

    return primes

start = time.time()
print(len(prime_in(1000)))
end = time.time()

print("程序运行时间:{}".format(end-start))

运行结果:

168
程序运行时间:0.016394853591918945

如果求100000里有多少个质数呢?(

prime_in(1000)

改为

prime_in(100000)

9592
程序运行时间:23.66012716293335

运行时间明显大幅度上升,如何优化性能呢?



3.2 jit装饰器

对代码进行修改:

import time
from numba import jit    # 导入jit装饰器

@jit(nopython=True)
def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    return True

@jit(nopython=True)
def prime_in(n):
    primes = []
    for i in range(2, n+1):
        if is_prime(i):
            primes.append(i)

    return primes

start = time.time()
print(len(prime_in(100000)))
end = time.time()

print("程序运行时间:{}".format(end-start))

结果截然不同:

9592
程序运行时间:3.5163464546203613


jit

装饰器是用来做什么的呢?


jit

的全称是

Just-In-Time

,用此装饰器“装饰”的函数都可以获得循环处理等的性能优化,还对

Numpy

做了支持。

为了获得最佳的性能,建议

jit

装饰器中使用参数

nopython=True

,但其实它根本不使用Python解释器,

@jit(nopython=True)

也可以写为

@njit

(需要导入

nijt

)。



4. 其他资源

Github:

https://github.com/numba/numba


官方文档:

https://numba.readthedocs.io/en/stable/


🎉🎉🎉 好了,今天的课程就到这里,我是wangzirui32,喜欢的可以点个收藏和关注,我们下次再见!



版权声明:本文为wangzirui32原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。