前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用numba給Python代码加速 [3]

利用numba給Python代码加速 [3]

作者头像
用户6021899
发布2022-03-04 12:49:09
4180
发布2022-03-04 12:49:09
举报

@guvectorize 装饰器

vectorize()允许您编写一次只能处理一个元素的UFUNC,但guvectorize()装饰器将这一概念更进一步,允许您编写可以处理任意数量的输入数组元素的UFUNC,并获取和返回不同维度的数组。

与vectorize()函数相反,guvectorize()函数不返回其结果值:它们将其作为数组参数,必须由函数填充。这是因为数组实际上是由NumPy的分派机制分配的,该机制调用NUMA生成的代码。

与vectorize()decorator类似,guvectorize()也有两种操作模式:积极编译和惰性编译。

一个简单的例子:

代码语言:javascript
复制
@guvectorize([(int64[:], int64, int64[:])], '(n),()->(n)')
def g(x, y, res):
    for i in range(x.shape[0]):
        res[i] = x[i] + y
    # 不写return res 
代码语言:javascript
复制
>>> a = np.arange(5)
>>> a
array([0, 1, 2, 3, 4])
>>> g(a,100) # 调用的时候参数只有x,y,没有res
array([100, 101, 102, 103, 104], dtype=int64)

函数签名中“'(n),()->(n)'” 表示输入参数为一个一维数组和一个标量,返回一个一维数组。

可以自动维数扩展,x参数可传入二维数组,y参数可以传入一维数组,根据形状自动匹配。

代码语言:javascript
复制
>>>a = np.arange(6).reshape(2, 3)
>>>a
array([[0, 1, 2],
       [3, 4, 5]])
>>>g(a, np.array([10, 20]))
array([[10, 11, 12],                    # + 10
       [23, 24, 25]], dtype=int64)      # + 20
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档