4

ここで 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__"。何を与える?

4

1 に答える 1