信息介绍
Numba,一款可以让Python函数编译为机器代码的JIT编译器,它可以加速Python运行,想必很多人对它都十分感兴趣,接下来我们就来看看吧。
Numba是什么?
Numba是一个库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码(稍后再做说明)。翻译/魔术是使用LLVM编译器完成的,该编译器是相当活跃的开源社区开发的。
Numba最初是由Continuum Analytics内部开发,此公司也开发了**的Anaconda,但现在它是开源的。核心应用领域是math-heavy(密集数学?重型数学?)和array-oriented(面向数组)的功能,它们在本地Python中相当缓慢。想象一下,在Python中编写一个模块,必须一个元素接着一个元素的循环遍历一个非常大的数组来执行一些计算,而不能使用向量操作来重写。这是很不好的主意,是吧?所以“通常”这类库函数是用C / C ++或Fortran编写的,编译后,在Python中作为外部库使用。Numba这类函数也可以写在普通的Python模块中,而且运行速度的差别正在逐渐缩小。
如何使用Numba呢?
使用它的要求不多。基本上,你写一个自己的“普通”的Python函数,然后给函数定义添加一个装饰(如果你不是很熟悉装饰器,读一下关于this或that)。你可以使用不同类型的装饰器,但@jit可能是刚开始的选择之一。其他装饰器可用于例如创建numpy通用功能@vectorize或编写将在CUDA GPU上执行的代码@cuda。在本文中暂时不介绍这些装饰。现在,让我们来看看基本的步骤。他们提供的代码示例是2d数组的求和函数,以下是代码:
from numba import jit
from numpy import arange
# jit decorator tells Numba to compile this function.# The argument types will be inferred by Numba when function is called.
@jit
def sum2d(arr):
M, N = arr.shape
result = 0.0
for i in range(M):
for j in range(N):
result += arr[i,j]
return result
a = arange(9).reshape(3,3)
print(sum2d(a))
正如你所看到的,Numba装饰器被添加到函数定义中,并且voilá这个函数将运行得很快。但是,这里带来了很有趣的注意事项:你只能使用Numpy和标准库里的函数来加快Numba速度,甚至不需要开了他们所有的特性。他们有一个相当好的文档(参考资料),列出了所有支持的内容。见here是所支持Python的功能和here 是所支持的Numpy功能。现在支持的功能可能还不太多,但我想告诉你,这就够了!请记住,Numba不是要加快你的数据库查询或如何强化图像处理功能。他们的目标是加快面向数组的计算,我们可以使用它们库中提供的函数来解决。
Numba是什么?
Numba是一个库,可以在运行时将Python代码编译为本地机器指令,而不会强制大幅度的改变普通的Python代码(稍后再做说明)。翻译/魔术是使用LLVM编译器完成的,该编译器是相当活跃的开源社区开发的。
Numba最初是由Continuum Analytics内部开发,此公司也开发了**的Anaconda,但现在它是开源的。核心应用领域是math-heavy(密集数学?重型数学?)和array-oriented(面向数组)的功能,它们在本地Python中相当缓慢。想象一下,在Python中编写一个模块,必须一个元素接着一个元素的循环遍历一个非常大的数组来执行一些计算,而不能使用向量操作来重写。这是很不好的主意,是吧?所以“通常”这类库函数是用C / C ++或Fortran编写的,编译后,在Python中作为外部库使用。Numba这类函数也可以写在普通的Python模块中,而且运行速度的差别正在逐渐缩小。
如何使用Numba呢?
使用它的要求不多。基本上,你写一个自己的“普通”的Python函数,然后给函数定义添加一个装饰(如果你不是很熟悉装饰器,读一下关于this或that)。你可以使用不同类型的装饰器,但@jit可能是刚开始的选择之一。其他装饰器可用于例如创建numpy通用功能@vectorize或编写将在CUDA GPU上执行的代码@cuda。在本文中暂时不介绍这些装饰。现在,让我们来看看基本的步骤。他们提供的代码示例是2d数组的求和函数,以下是代码:
from numba import jit
from numpy import arange
# jit decorator tells Numba to compile this function.# The argument types will be inferred by Numba when function is called.
@jit
def sum2d(arr):
M, N = arr.shape
result = 0.0
for i in range(M):
for j in range(N):
result += arr[i,j]
return result
a = arange(9).reshape(3,3)
print(sum2d(a))
正如你所看到的,Numba装饰器被添加到函数定义中,并且voilá这个函数将运行得很快。但是,这里带来了很有趣的注意事项:你只能使用Numpy和标准库里的函数来加快Numba速度,甚至不需要开了他们所有的特性。他们有一个相当好的文档(参考资料),列出了所有支持的内容。见here是所支持Python的功能和here 是所支持的Numpy功能。现在支持的功能可能还不太多,但我想告诉你,这就够了!请记住,Numba不是要加快你的数据库查询或如何强化图像处理功能。他们的目标是加快面向数组的计算,我们可以使用它们库中提供的函数来解决。
联系方式
VX:18710030740 老男孩IT教育:北京/上海/深圳 Python linux GO 网络安全 软件测试周末、脱产、网络课程
温馨提示
1、信息由网友自行发布,平台仅提供信息展示服务,请主动核实信息真实性,避免上当!
2、如发现虚假、违规信息?点此举报
2、如发现虚假、违规信息?点此举报
发布供求信息
最新供求
新
磊硕紫色PPSU塑料棒 Φ80*1000mm 医疗器械结构件用 耐高压聚苯砜棒材
新
磊硕紫色PPSU棒材 Φ90×1000mm 耐水解性能优异 食品机械配件用
新
磊硕紫色聚苯砜PPSU棒材 Φ75mm 高冲击强度 适配加热装置零件
新
磊硕紫色PPSU棒材 Φ30×1000mm 高温热水环境适用 聚苯砜材料
新
磊硕紫色PPSU圆棒 Φ60×1000mm 工业设备热水系统结构材料
新
上海自动门滑轮维修感应门马达维修 玻璃门地弹簧 控制器 感应器维修安装
新
上海凯旋路专业维修安装密码门禁维修 刷卡门禁维修
新
磊硕高性能聚苯硫醚板 可持续加工 多规格现货供应
新
磊硕PPS板材可替代金属结构件 轻量化耐热高强度塑料板
新
磊硕耐腐蚀耐磨PPS板 石油化工设备用聚苯硫醚塑料板
推荐供求