ndarray サブクラス__array_wrap__が単項関数または二項関数で呼び出されているかどうかを確認する方法はありますか? (別参照)
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.absandのようなものnp.sqrtをunary関数とは考えていませんでした。
于 2013-03-08T15:53:30.407 に答える