python numba class_Numba 开发手册 (二)
四、灵活专业的@generated_jit
@jit修饰符在很多情况下是极其有效的,但是有时需要根据输入变量的类型来决定函数的实现功能。@generated_jit修饰符编译时能够进行一些特例化选择。
示例:
importnumpy as npfrom numba importgenerated_jit, types
@generated_jit(nopython=True)defis_missing(x):"""Return True if the value is missing, False otherwise."""
ifisinstance(x, types.Float):return lambdax: np.isnan(x)elifisinstance(x, (types.NPDatetime, types.NPTimedelta)):#The corresponding Not-a-Time value
missing = x('NaT')return lambda x: x ==missingelse:return lambda x: False
上面的代码完成的是根据输入去判断缺省值的事情。
注意下面问题:
1、在调用的时候,传入的参数,使用变量的numba类型,而不是值;
2、这个修饰函数返回的结果不是一个计算结果;
五、创建Numpy通用函数(universal funtions)
首先看下什么叫做universal funtions:
A universal function (or ufunc for short) is a function that operates on ndarrays in an element-by-element fashion, supporting array broadcasting, type casting, and several other standard features. That is, a ufunc is a “vectorized” wrapper for a function that takes a fixed number of specific inputs and produces a fixed number of specific outputs.
@vectorize修饰符
传统的ufuncs的构建是涉及到C语言编程的,numba中只需要@vectorize修饰符,就可以获得和C写的ufuncs一样快速的性能。
使用@vectorize,可以写操作输入标量的函数,而不是arrays。(这是什么意思?)
(这个地方给出的示例没有看懂,除了定义的时候不同,没有看出有什么区别)
按照文档里面的说法,是NumPy ufuncs会自动获得其他功能,如缩小,累积或广播。
@guvectorize修饰符
guvectorize允许处理任意长度的输入arrays。
但是与vectorize不同的是,guvectorize不会返回结果值,而是作为函数的参数传入。
下面是一个示例:
@guvectorize([(int64[:], int64, int64[:])], '(n),()->(n)')defg(x, y, res):for i inrange(x.shape[0]):
res[i]= x[i] + y
上面的函数中,传入的是一个一维数组和一个标量,最后一个传入的参数是结果值。在声明的过程中,有两个事情需要注意一下:
'(n),()->(n)'的意思是说明传入的是一个长度维n的一维向量和一个标量,输出的是一个长度为n的一维向量
需要指定支持的数据类型
Dynamic universal functions
如果不去申明具体的数据类型,那么将会编译出一个dynamic universal function。
每次改变传入的数据类型,那么numba就会generate新的kernels。
六、用@jitclass编译python类
示例:
importnumpy as npfrom numba import jitclass #import the decorator
from numba import int32, float32 #import the types
spec=[
('value', int32), #a simple scalar field
('array', float32[:]), #an array field
]
@jitclass(spec)classBag(object):def __init__(self, value):
self.value=value
self.array= np.zeros(value, dtype=np.float32)
@propertydefsize(self):returnself.array.sizedefincrement(self, val):for i inrange(self.size):
self.array[i]=valreturn self.array
(此处留坑)
python numba class_Numba 开发手册 (二)相关推荐
- GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点
GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry--渲染点 效果 1.html官方版 <!DOCTYPE html> <html> &l ...
- GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON——渲染点
GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON--渲染点 1.html官方版 效果-点 html官方版本 <!DOCTYPE html> < ...
- Python之web开发(二):python使用django框架搭建网站之新建文件
本文为Django项目创建的简单介绍,更为详细的Django项目创建,编辑可以参考http://www.imooc.com/learn/790 Step 1. 点击 File --> New P ...
- python numba class_Numba jitclass不能使用python Lis
我正在使用python 3.6和{}.在 这个问题有一个sister,在这里我从另一个视角来处理这个问题.但它们不是同一个问题. 我实现了一个r-tree结构,并尝试使用Numba来提高性能,但是当我 ...
- Python:Opencv开发手册
1.基本语法 src = cv.imread("E:\1.jpg") //获取图片位置 cv.namedWindow("Image",cv.WINDOW_AUT ...
- python——Web服务开发(二)分布式缓存
上一篇博客写了flask模块实现web服务搭建的基本方法以及简单的缓存功能,但是这种缓存随着服务重启便会丢失,也无法满足多个服务共享缓存的需求,因此,我们通过redis来实现web服务的分布式缓存. ...
- Python游戏引擎开发(六):动画的小小研究
今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 ...
- 阿里巴巴 Java 开发手册 Java 开发手册(1.0.1)
一.编程规约 (一) 命名规约 [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / nam ...
- python struct pack string_struct (String) – Python 中文开发手册
Python 中文开发手册 struct (String) - Python 中文开发手册 该模块执行Python值与C结构之间的转换,表示为Python字符串.这可用于处理存储在文件或网络连接中的二 ...
最新文章
- 2022-2028年中国刀具行业投资分析及前景预测报告
- python close函数_Matplotlib的close()函数使Tkinter GUI窗口关闭
- CentOS包管理器yum
- 【Python】青少年蓝桥杯_每日一题_7.03_输出符合要求的字母
- springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
- Multi-Range Read (MRR)原理
- SAP XS Engine 里的 HANA live report metadata
- 【C语言】在线OJ题 BC7-BC52-牛客网编程初学者入门训练
- python爬虫从小白到高手 Day1 爬取百度音乐歌单
- GDAL_GRID插值Y轴反向的问题
- 【大数据部落】IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么
- string成员函数
- Linux内核学习开始
- Linux-DNS学习记录01-安装部署
- C++检测键盘大小写
- 功能自动化测试之QTP增强测试脚本(二)
- Linux man命令后数字含义
- 2022年华为杯中国研究生数学建模竞赛D题思路
- Lombok 新特性(idea插件)
- 【Node.js】 基础语法