ここで Numpy v1.11 docs で__numpy_ufunc__()
説明されているメソッドを使用して、 のサブクラスで numpy ufuncs の動作をオーバーライドしようとしていますが、呼び出されないようです。この使用例はガイドに記載されていますが、実際に を使用している例は見つかりません。誰もこれを試しましたか?最小限の例を次に示します。ndarray
__numpy_ufunc__()
# Check python version
import sys
print(sys.version)
3.5.1 |Continuum Analytics, Inc.| (デフォルト、2016 年 6 月 15 日 15:32:45)
[GCC 4.4.7 20120313 (レッドハット 4.4.7-1)
# Check numpy version
import numpy as np
print(np.__version__)
1.11.2
# Subclass ndarray as discussed in
# https://docs.scipy.org/doc/numpy/user/basics.subclassing.html
class Function(np.ndarray):
# Create subclass object by view
def __new__(cls):
obj = np.asarray([1,2,3]).view(cls)
return obj
# I'm not even adding anything functionality yet
def __array_finalize(self,obj): pass
# Override ufuncs
def __numpy_ufunc__(ufunc, method, i, inputs, **kwargs):
print("In PF __numpy_ufunc__")
# do other stuff here if I want to
# and probably need to return a value...
# Create two Functions
f1=Function()
f2=Function()
# Check that they are correctly initialized as Function objects
# not just ndarrays
print(type(f1),type(f2))
⟨class ' main .Function'⟩ ⟨class ' main .Function'⟩
# Add using operator
f1+f2
関数([2, 4, 6])
# Add, explicitly demanding a numpy ufunc
np.add(f1,f2)
関数([2, 4, 6])
明らかに、サブクラス化は機能しており、バックグラウンドで numpy を使用して配列を追加しています。この機能を採用するのに十分な新しいバージョンのnumpyを使用してい__numpy_ufunc__()
ます(そのドキュメントページによると、v1.11で新しくなりました)。しかし、このコードは出力されません"In PF __numpy_ufunc__"
。何を与える?