![](/img/trans.png)
[英]How can I use Numba "@vectorize" ufunc with a structured Numpy array?
[英]Use of __numpy_ufunc__()
我试图使用__numpy_ufunc__()
方法解释在numpy的1.11文档这里 ,覆盖上的一个子类numpy的ufuncs的行为ndarray
,但它似乎永远不会被调用。 尽管指南中列出了这个用例,但我找不到任何实际使用__numpy_ufunc__()
例子。 有没人试过这个? 这是一个最小的例子:
# Check python version
import sys
print(sys.version)
3.5.1 | Continuum Analytics,Inc。| (默认,2016年6月15日,15:32:45)
[GCC 4.4.7 20120313(Red Hat 4.4.7-1)
# Check numpy version
import numpy as np
print(np.__version__)
1.11.2
# Subclass ndarray as discussed in
# https://docs.scipy.org/doc/numpy/user/basics.subclassing.html
class Function(np.ndarray):
# Create subclass object by view
def __new__(cls):
obj = np.asarray([1,2,3]).view(cls)
return obj
# I'm not even adding anything functionality yet
def __array_finalize(self,obj): pass
# Override ufuncs
def __numpy_ufunc__(ufunc, method, i, inputs, **kwargs):
print("In PF __numpy_ufunc__")
# do other stuff here if I want to
# and probably need to return a value...
# Create two Functions
f1=Function()
f2=Function()
# Check that they are correctly initialized as Function objects
# not just ndarrays
print(type(f1),type(f2))
⟨class的主要 .Function'⟩⟨class的主要 .Function'⟩
# Add using operator
f1+f2
功能([2,4,6])
# Add, explicitly demanding a numpy ufunc
np.add(f1,f2)
功能([2,4,6])
很明显,子类化工作,并使用numpy在幕后添加数组。 我正在使用一个足够新的numpy版本来使用__numpy_ufunc__()
功能(根据该文档页面,它是v1.11中的新功能)。 但是这段代码永远不会输出"In PF __numpy_ufunc__"
。 是什么赋予了?
此功能最终在Numpy 1.13中以新名称发布:
__array_ufunc__
补充道这是重命名和重新设计的
__numpy_ufunc__
。 任何类,ndarray子类是否可以定义此方法或将其设置为None以覆盖NumPy的ufuncs的行为。 这与Python的__mul__
和其他二进制操作例程非常相似。 有关此新选项的实现和行为的更详细说明,请参阅文档。 API是临时的,我们尚不保证向后兼容性,因为可能会在等待反馈之前进行修改。 有关更多详细信息,请参阅NEP和文档 。
这应该可以解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.