问题描述
我正在为一个项目从 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__
代码中的逻辑出现一些问题。
我希望得到澄清:
- 为什么会发生这种行为变化? (我在 numpy 发行说明中找不到对此的任何引用)
- 是否可以复制由 numba guvectorize 创建的 gufunc 输出的旧行为以保留输入的类(具有最高的
__array_priority__
)?还是输出总是属于 ndarray 类?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)