有没有办法判断是否__array_wrap__使用一元函数或二元函数调用ndarray子类?(另一个参考)
这只是部分答案:
ufunc 的参数作为元组传递给context。形式为:
(ufunc, ufunc_args, ufunc_domain)
Run Code Online (Sandbox Code Playgroud)
你可以检查 的长度,ufunc_args看看你是否有 1 个参数或 2 个参数。顺便说一句,我不知道是什么ufunc_domain(在我的测试中,它似乎总是0)...
import numpy as np
class Tester(np.ndarray):
def __array_wrap__(self,output,context=None):
print context[0].__name__,'is binary' if len(context[1]) > 1 else 'is unary'
return np.ndarray.__array_wrap__(self,output,context)
a = np.zeros(10)
b = a.view(Tester)
print (type(b))
-b
np.sqrt(b)
b+b
Run Code Online (Sandbox Code Playgroud)
我想这就是你如何判断__array_wrap__它是二进制还是一元 ufunc 的方法。不幸的是,当我一开始问这个问题时,我希望知道这个 ufunc 调用是否是一元运算符的结果。我不认为np.abs和 之类的东西np.sqrt是unary函数。