首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NumPy中的‘composition’组合

NumPy中的‘composition’组合
EN

Stack Overflow用户
提问于 2019-09-15 04:00:44
回答 1查看 280关注 0票数 4

我的代码包含以下定义:

代码语言:javascript
复制
skew_min = np.frompyfunc(lambda x, y: min(x + 1, y), nin=2, nout=1)

关键的一点是,它是ufunc,因为我进一步调用了skew_min.accumulate。但是这个定义真的很糟糕。它工作缓慢(因为从本机代码调用python)并产生一个错误类型的结果( pyobject数组而不是float数组)。我的梦想是,应该有一些FP风格的组合器来从其他的ufunc中构建ufunc,类似于这样:

代码语言:javascript
复制
skew_min = compose_1(np.minimum, subst_1(np.add, 1))

(相应地,组合函数compose_1subst_1执行ufunc-tional组合和替换)。但我在NumPy文档中没有找到任何类似于NumPy的东西。

那么,为了构建一个新的ufunc,是否有一种很好的方法来组合两个?

EN

回答 1

Stack Overflow用户

发布于 2022-09-18 22:53:13

您可以使用numba的@numba.vectorize@numba.guvectorize (numba博士):

代码语言:javascript
复制
>>> import numpy as np
>>> import numba
>>> @numba.vectorize(['f8(f8, f8)', 'i8(i8, i8)'])
... def skew_min(x: float, y: float) -> float:
...     return min(x + 1, y)
...
>>> skew_min(3, 3.5)
3.5
>>> skew_min([2, 3, 4], 3.5)
array([3. , 3.5, 3.5])
>>> skew_min.outer(np.arange(3), [1.62, 2.72, 3.14])
array([[1.  , 1.  , 1.  ],
       [1.62, 2.  , 2.  ],
       [1.62, 2.72, 3.  ]])

另外,numba编译函数,通常比使用numpy.frompyfuncnumpy.vectorize的速度更快。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57941047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档