numba实现python代码的加速

本文介绍了如何使用Numba库来加速Python代码。Numba通过装饰器实现代码编译优化,但不支持某些Python特性如异常处理和with语句。文章提供测试代码展示了Numba的加速效果,并提醒在使用Numba时注意类型一致性,避免使用Python List,推荐使用Numpy数组,以保持在nopython模式下。此外,还介绍了Vectorize装饰器用于标量计算的加速。
摘要由CSDN通过智能技术生成

概述

最近在做python加速的事,numba的加速比较可观。

使用场景

Numba 简单到只需要在函数上加一个装饰器就能加速程序,但也有缺点。目前 Numba 只支持了 Python 原生函数和部分 NumPy 函数,
其他一些场景可能不适用。比如 Numba 官方给出这样的例子:
pandas 是更高层次的封装, Numba 其实不能理解它里面做了什么,所以无法对其加速。一些大家经常用的机器学习框架,如 scikit-learn , tensorflow , pytorch 等,已经做了大量的优化,不适合再使用 Numba 做加速。
此外,Numba 还不支持:

try … except 异常处理;
with 语句;
yield from 语句。
此外,Numba 还不支持:

try … except 异常处理;
with 语句;
yield from 语句。
那么 Numba 当前支持的功能有哪些呢?
详情请移步:http://numba.pydata.org/numba-doc/latest/reference/pysupported.html

你可以使用装饰器,@jit(nopython=True)
装饰器在这里是将其他函数作为参数,然后返回其他函数,目的是为了扩展其功能。

测试代码1

hello_numba.py

import numpy as np
import time
from numba import jit, njit
import random


#numba官方给的示例函数
def monte_carlo_pi(nsamples):
    acc = 0
    for i in range(nsamples):
        x = random.random()
        y = random.random()
        if(x**2 + y**2) < 1.0:
            acc += 1
    return 4.0 * acc / nsamples

if __name__ == "__main__":
    t1 = time.process_time()
    monte_carlo_pi(1000000)
    print("time1:%f" % (time.process_time() - t1))
    #定义一个新的函数
    monte_carlo_pi_jit = jit(
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值