6

有没有办法判断 ndarray 子类__array_wrap__是用一元函数还是二元函数调用的?(另一个参考

4

1 回答 1

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.sqrtunary

于 2013-03-08T15:53:30.407 回答