微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 numpy 更新更改 numba guvectorize 输出的类类型

如何解决使用 numpy 更新更改 numba guvectorize 输出的类类型

我正在为一个项目从 1.15.2 -> 1.16.6 更新 numpy。在这个项目中,我们有一个 numpy.ndarray 的子类,它实现了 __array_wrap____array_finalize__。此外,还有一些函数是通过使用 numba 的 guvectorize 装饰器制作成 gufunc 的。

我看到的问题是使用 ndarray 子类的实例调用 guvectorized gufunc。

随着 numpy 1.15.2 逐步执行代码,我看到 def __array_wrap__(self,obj,context=None)调用,并将 obj 作为 ndarray 子类的实例。

但是,一旦 numpy 升级到 1.16.6,def __array_wrap__(self,context=None) 就会以 obj 作为 ndarray 的实例被调用。这会导致 __array_wrap__ 代码中的逻辑出现一些问题。

我希望得到澄清:

  1. 为什么会发生这种行为变化? (我在 numpy 发行说明中找不到对此的任何引用)
  2. 是否可以复制由 numba guvectorize 创建的 gufunc 输出的旧行为以保留输入的类(具有最高的 __array_priority__)?还是输出总是属于 ndarray 类?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。