Numba:高性能Python编译器
一、简介
Numba是一个开源JIT编译器,它将Python和NumPy代码的子集转换为快速机器代码。
二、主要特点
加速Python功能
Numba使用行业标准的LLVM编译器库在运行时将Python函数转换为优化的机器代码。 Python中的Numba编译数值算法可以接近C或FORTRAN的速度。
您不需要替换Python解释器,运行单独的编译步骤,甚至安装C / C ++编译器。 只需将其中一个Numba装饰器应用到Python函数中,Numba就会完成剩下的工作。
专为科学计算而打造
Numba旨在与NumPy阵列和功能一起使用。 Numba为不同的阵列数据类型和布局生成专门的代码,以优化性能。特殊装饰器可以创建通用功能,可以像NumPy函数那样在NumPy数组上进行广播。
Numba还可以与Jupyter笔记本电脑配合使用,实现交互式计算,以及分布式执行框架,如Dask和Spark。
并行化您的算法
Numba提供了一系列用于并行化CPU和GPU代码的选项,通常只需要很少的代码更改。
便携式编译
运送高性能Python应用程序,而不必担心二进制编译和打包。您的源代码仍然是纯Python,而Numba在运行时处理编译。我们在200多种不同的平台配置中持续测试Numba。
Numba支持Intel和AMD x86,POWER8 / 9和ARM CPU,NVIDIA和AMD GPU,Python 2.7和3.4-3.7,以及Windows / macOS / Linux。大多数系统的预编译Numba二进制文件可用作conda软件包和pip可安装的轮子。
三、示例
python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。
“一行代码让python的运行速度提高100倍”这绝不是哗众取宠的论调。
我们来看一下这个最简单的例子,从1一直累加到1亿。
最原始的代码:
import time
def foo(x,y):
tt = time.time()
s = 0
for i in range(x,y):
s += i
print('Time used: {} sec'.format(time.time()-tt))
return s
print(foo(1,100000000))
结果:
Time used: 6.779874801635742 sec 4999999950000000
我们来加一行代码,再看看结果:
from numba import jit
import time
@jit
def foo(x,y):
tt = time.time()
s = 0
for i in range(x,y):
s += i
print('Time used: {} sec'.format(time.time()-tt))
return s
print(foo(1,100000000))
结果:
Time used: 0.04680037498474121 sec 4999999950000000
是不是快了100多倍呢?
就因为使用了 numba库的jit模块。
Numba:高性能Python编译器的更多相关文章
- 使用numba加速python程序
前面说过使用Cython来加速python程序的运行速度,但是相对来说程序改动较大,这次就说一种简单的方式来加速python计算速度的方法,就是使用numba库来进行,numba库可以使用JIT技术即 ...
- 用 Numba 加速 Python 代码
原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...
- 4 个快速的 Python 编译器 for 2018
简评:Python 和其他的解释型语言一样经常被吐槽性能不行,所以开发人员为了提升性能创建了不少编译器,本文则选取其中的四个做了基准测试. Python 其实是一种相当快的语言,但它并不像编译型语言那 ...
- Python 编译器与解释器
Python 编译器与解释器 Python的环境我们已经搭建好了,可以开始学习基础知识了.但是,在此之前,还要先说说编译器与解释器相关的内容. 如果这部分内容,让你觉得难以理解或不能完全明白,可以暂时 ...
- python编译器的安装和pycharm的安装
python编译器的安装 进入官网https://www.python.org/,根据提示安装 安装python编译器 pychram安装 下载地址: https://www.jetbrains.co ...
- 11 个最佳的 Python 编译器和解释器
原作:Archie Mistry 翻译:豌豆花下猫@Python猫 原文:https://morioh.com/p/765b19f066a4 Python 是一门对初学者友好的编程语言,是一种多用途的 ...
- 转换器3:手写PHP转Python编译器,词法部分
上周写了<ThinkPhp模板转Flask.Django模板> 一时技痒,自然而然地想搞个大家伙,把整个PHP程序转成Python.不比模板,可以用正则匹配偷懒,这次非写一个Php编译器不 ...
- Numba加速Python程序
众所周知,Python和Java一样是基于虚拟机的语言,并不是像C/C++那样将程序代码编译成机器语言再运行,而是解释一行执行一行,速度比较慢.使用Numba库的JIT技术编译以后,可以明显提高程序的 ...
- 高性能python
参考来源:Python金融大数据分析第八章 提高性能有如下方法 1.Cython,用于合并python和c语言静态编译泛型 2.IPython.parallel,用于在本地或者集群上并行执行代码 3. ...
随机推荐
- 转换python脚本为可执行程序的方式
背景: 部分工具使用python脚本编写,而目标服务器,没有安装python包,导致使用工具不方便,还需要另外安装python. 目前主要有2个主流软件,可做此类转换,把对应工具脚本转换为exe: p ...
- COM组件没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
1.解决办法:在项目属性里设置“生成”=>“目标平台”为x86而不是默认的ANY CPU:
- js 获取ISO-8601格式时间字符串的时间戳
function getTimeStamp(isostr) { var parts = isostr.match(/\d+/g); return new Date(parts[0]+'-'+parts ...
- redis资料
http://snowolf.iteye.com/blog/1630697 征服redis配置 http://redis.readthedocs.org/en/latest/ redis命令参考 ...
- Ajax 结果提取
Python 如何提取 Ajax 真正响应的内容: 以 https://m.weibo.cn/u/2830678474 这个网页为例,选择其中一个 Ajax 请求,找到请求的URL和传递的参数 imp ...
- Streaming 101
开宗明义!本文根据Google Beam大神Tyler Akidau的系列文章<The world beyond batch: Streaming 101>(批处理之外的流式世界)整理而成 ...
- mybatis 之 resultType="HashMap" parameterType="list"
public ServiceMessage<List<Map<String, Object>>> queryGoodsStockInfo(List<Long& ...
- jQuery Easing 动画效果扩展--使用Easing插件,让你的动画更具美感。
jQuery Easing 是一款比较老的jQuery插件,在很多网站都有应用,尤其是在一些页面滚动.幻灯片切换等场景应用比较多.它非常小巧,且有多种动画方案供选择,使用简单,而且免费. 引入Eas ...
- 【大数据系列】hadoop单节点安装官方文档翻译
Hadoop: Setting up a Single Node Cluster. HADOOP:建立单节点集群 Purpose Prerequisites Supported Platforms R ...
- C++ 输入输出流 文本文件 二进制文件读写
文本文件/ASCII文件(能直接显示内容,费存储空间):文件中每一个字节中均以ASCII代码形式存放数据,即一个字节存放一个字符,这个文件就是ASCII文件或称字符文件. 二进制文件(不能显示内容,节 ...