我正在尝试使用Numpy v1.11 文档中__numpy_ufunc__()
解释的方法来覆盖 numpy ufuncs 在子类上的行为,但它似乎从未被调用。尽管指南中列出了这个用例,但我找不到任何人实际使用. 有没有人试过这个?这是一个最小的例子:ndarray
__numpy_ufunc__()
# Check python version
import sys
print(sys.version)
3.5.1 |连续分析公司| (默认,2016 年 6 月 15 日,15:32:45)
[GCC 4.4.7 20120313(红帽 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'main.Function'⟩⟨class'main.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__"
。是什么赋予了?