通过numba模块给Python代码提速的方法详解
作者:三爷带你飞 发布时间:2022-02-02 09:15:19
简介:numba是Anaconda公司开发的针对Python的开源JIT编译器,用于提供Python版CPU和GPU编程,速度比原生Python快数十倍。numba是第三方库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码,使得在部分场景下执行Python的效率得到飞速的提升。
工作原理对比:
Python文件执行过程
1、.py文件通过解释器转化为虚拟机可以执行的字节码(.pyc);字节码在虚拟机上执行,得到结果。
2、字节码是一种只能运行在虚拟机上的文件,默认后缀.pyc,Python生成.pyc之后一般放在内存中继续使用,并不是每次都将.pyc文件保存到磁盘上。
而在JIT(Just-In-Time)技术中,JIT编译器将Python源代码.py直接编译成机器可以执行的机器语言(机器码),就可以直接在CPU等硬件上运行。这样,JIT就跳过了原来的虚拟机,执行速度几乎与用C语言编程速度无差别。
numba是Anaconda公司开发的针对Python的开源JIT编译器。谷歌开源的jax库也是属于jit编译器之一,该模块则主要应用于科学计算和机器学习方向。
安装:如网络限制,请绕道国内镜像豆瓣源,清华源等。pip安装第三方库全攻略:普通安装、安装whl后缀文件、使用国内镜像安装
pip install numba
使用方法:
from numba import jit
对函数进行装饰@jit(nopython=True)
注意事项:numba只符合部分场景,特殊场景无法使用。例如机器学习训练数据时,不能简单的进行装饰使用,否则会抛出异常。
源码:
from numba import jit
import datetime
def calc_sum1(loop):
n = 0
for i in range(loop):
for j in range(loop):
n += j
return n
@jit(nopython=True)
def calc_sum2(loop):
n = 0
for i in range(loop):
for j in range(loop):
n += j
return n
@jit(nopython=True)
def calc_sum2(loop):
n = 0
for i in range(loop):
for j in range(loop):
n += j
return n
if __name__ == '__main__':
print(datetime.datetime.now())
r1 = calc_sum1(10000)
print(r1)
print(datetime.datetime.now())
print("*" * 30)
print(datetime.datetime.now())
r2 = calc_sum2(10000)
print(r2)
print(datetime.datetime.now())
结果对比:原始代码执行需要花费5秒左右,而使用numba装饰后仅需300毫秒左右,提升10倍有余。如果loop设置的参数更长,numba装饰后执行的结果更佳。
来源:https://blog.csdn.net/hzblucky1314/article/details/122429569
猜你喜欢
- 本文实例讲述了Python单向链表和双向链表原理与用法。分享给大家供大家参考,具体如下:链表是一种数据结构,链表在循环遍历的时候效率不高,但
- 网络上有很多个性化的404页面,但是404页面不仅仅是个性化展示,404页面本来目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用
- PDOStatement::debugDumpParamsPDOStatement::debugDumpParams — 打印一条 SQL
- 这阵子没有精力完整翻译和发到译言( 现下正渐入状态,预计写博客量会逐步提升回来),简短做一个概要翻译,为近期工作需要做一个参考。
- <?php $foo = 'Bob'; // 将 'Bob' 赋给 $foo $bar = &
- 一、实例将以下列表的backup_unit_id全部提取出来示例:dbs = [{ &nbs
- 准备下载安装Python3官网下载即可,选择合适的版本:https://www.python.org/downloads/安装一直下一步即可
- 假设mysql安装在c:盘,mysql数据库的用户名是root,密码是123456,数据库名是database_name,在d:盘根目录下面
- 字符串转十六进制StrToHex Function<% Response.Write StrToHex("Nice
- 前言今天笔者想和大家来聊聊python接口自动化如何使用requests库发送http请求,废话呢笔者就不多说了,直接进入正题。一、requ
- 应用场景:工作中经常遇到大量的数据需要整合、去重、按照特定格式导出等情况。如果用 Excel 操作,不仅费时费力,还不准确,有么有更高效的解
- 这篇文章主要介绍了Python读取表格类型文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 1. ASP与Access数据库连接: 代码如下:dim strConn dim conn strConn = "Provide
- '''数据集:伪造数据集(两个高斯分布混合)数据集长度:1000--------------------------
- #!/usr/bin/env python# -*- coding:utf-8-*-# file: {NAME}.py# @author:
- 本文实例讲述了PHP封装cURL工具类。分享给大家供大家参考,具体如下:CurlUtils工具类:<?php/** * cURL请求工
- 最近,为了能在数据库服务器中运行其他应用程序,在保持数据库操作系统版本不变的前提下对数据库服务器进行了软、硬件上的升级。在软件上,将操作系统
- 用js限制网页只在微信浏览器中打开js代码一$(function(){//判断页面是否是在微信浏览器打开//对浏览器的UserAgent进行
- 字符串中字符大小写的变换1. str.lower() //小写>>> 'SkatE'
- 书 名:细节决定交互设计的成败国际书号:ISBN 978-7-121-08232-0作 &nb