确定是否从一元ufunc或二进制ufunc调用ndarray子类上的__array_wrap__

时间:2013-03-08 15:30:59

标签: python numpy

有没有办法判断是否使用一元函数或二元函数调用ndarray子类的__array_wrap__? (另一个reference

1 个答案:

答案 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.absnp.sqrt视为unary函数。