有没有办法判断是否使用一元函数或二元函数调用ndarray子类的__array_wrap__
? (另一个reference)
答案 0 :(得分:1)
这只是部分答案:
ufunc的参数作为元组传递给context
。表格是:
(ufunc, ufunc_args, ufunc_domain)
您可以查看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
我想这就是你告诉__array_wrap__
它是二进制还是一元ufunc的方法。不幸的是,当我在开头问这个问题时,我希望知道这个ufunc调用是否是一元运算符的结果。我没有将np.abs
和np.sqrt
视为unary
函数。