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

✨博文作者 wangzirui32
喜欢的可以 点赞 收藏 关注哦~~
我的第156篇原创作品
本文首发于CSDN,未经许可禁止转载


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

目录

  • 1. Numba简介
  • 2. Numba安装
  • 3. 示例
    • 3.1 一个例子
    • 3.2 jit装饰器
  • 4. 其他资源

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,喜欢的可以点个收藏和关注,我们下次再见!

你可能感兴趣的:(Python模块介绍使用,Python,python,开发语言)