四、灵活专业的@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 开发手册 (二)相关推荐

  1. GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点

    GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry--渲染点 效果 1.html官方版 <!DOCTYPE html> <html> &l ...

  2. GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON——渲染点

    GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON--渲染点 1.html官方版 效果-点 html官方版本 <!DOCTYPE html> < ...

  3. Python之web开发(二):python使用django框架搭建网站之新建文件

    本文为Django项目创建的简单介绍,更为详细的Django项目创建,编辑可以参考http://www.imooc.com/learn/790 Step 1. 点击 File --> New P ...

  4. python numba class_Numba jitclass不能使用python Lis

    我正在使用python 3.6和{}.在 这个问题有一个sister,在这里我从另一个视角来处理这个问题.但它们不是同一个问题. 我实现了一个r-tree结构,并尝试使用Numba来提高性能,但是当我 ...

  5. Python:Opencv开发手册

    1.基本语法 src = cv.imread("E:\1.jpg") //获取图片位置 cv.namedWindow("Image",cv.WINDOW_AUT ...

  6. python——Web服务开发(二)分布式缓存

    上一篇博客写了flask模块实现web服务搭建的基本方法以及简单的缓存功能,但是这种缓存随着服务重启便会丢失,也无法满足多个服务共享缓存的需求,因此,我们通过redis来实现web服务的分布式缓存. ...

  7. Python游戏引擎开发(六):动画的小小研究

    今天我们来研究动画,其实这个动画就是一个Sprite+Bitmap的结合体.不造什么是Sprite和Bitmap?=__=#看来你是半路杀进来的,快去看看前几章吧: Python游戏引擎开发(一):序 ...

  8. 阿里巴巴 Java 开发手册 Java 开发手册(1.0.1)

    一.编程规约 (一) 命名规约 [强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ / nam ...

  9. python struct pack string_struct (String) – Python 中文开发手册

    Python 中文开发手册 struct (String) - Python 中文开发手册 该模块执行Python值与C结构之间的转换,表示为Python字符串.这可用于处理存储在文件或网络连接中的二 ...

最新文章

  1. 2022-2028年中国刀具行业投资分析及前景预测报告
  2. python close函数_Matplotlib的close()函数使Tkinter GUI窗口关闭
  3. CentOS包管理器yum
  4. 【Python】青少年蓝桥杯_每日一题_7.03_输出符合要求的字母
  5. springMVC参数的传递方式(1.通过@PathVariabl获取路径参数,2.@ModelAttribute获取数据,3.HttpServletRequest取参,4@RequestParam)
  6. Multi-Range Read (MRR)原理
  7. SAP XS Engine 里的 HANA live report metadata
  8. 【C语言】在线OJ题 BC7-BC52-牛客网编程初学者入门训练
  9. python爬虫从小白到高手 Day1 爬取百度音乐歌单
  10. GDAL_GRID插值Y轴反向的问题
  11. 【大数据部落】IBM SPSS Modeler通过数据挖掘我们能从股市数据得到什么
  12. string成员函数
  13. Linux内核学习开始
  14. Linux-DNS学习记录01-安装部署
  15. C++检测键盘大小写
  16. 功能自动化测试之QTP增强测试脚本(二)
  17. Linux man命令后数字含义
  18. 2022年华为杯中国研究生数学建模竞赛D题思路
  19. Lombok 新特性(idea插件)
  20. 【Node.js】 基础语法

热门文章

  1. 【tree】红黑树(上)
  2. 呼叫中心中间件(mod_cti基于FreeSWITCH)-自动外呼接口
  3. Android A/B系统切换
  4. Win10系统打开磁盘提示输入48位恢复密钥以解锁此驱动器解决方法
  5. VUE翻书效果(turn.js,仿真折角过渡)
  6. 使用Coded UI进行UI的自动化测试
  7. lucene中StandardAnalyzer的理解
  8. SAP-FICO学习总结(一)
  9. web前端对接海康大华视频
  10. 女性职工生育保险报销规则--孕期囤货指南--北京生育津贴申请指南--北京生育保险报销条件材料及流程(门诊产检费)