次の例:
import numpy as np
class SimpleArray(np.ndarray):
__array_priority__ = 10000
def __new__(cls, input_array, info=None):
return np.asarray(input_array).view(cls)
def __eq__(self, other):
return False
a = SimpleArray(10)
print (np.int64(10) == a)
print (a == np.int64(10))
次の出力が得られます
$ python2.7 eq.py
True
False
そのため、最初のケースでSimpleArray.__eq__
は呼び出されません (常に を返す必要があるためFalse
)。これはバグですか?もしそうなら、誰かが回避策を考えられますか? これが予期される動作でSimpleArray.__eq__
ある場合、両方のケースで確実に呼び出されるようにするにはどうすればよいですか?
編集:明確にするために、これはNumpyスカラー配列でのみ発生します-通常の配列では、オブジェクトが等値演算のRHSにある場合でも常にこれを実行する必要があることをNumpyに伝える__eq__
ため、常に呼び出されます:__array_priority__
__eq__
b = SimpleArray([1,2,3])
print(np.array([1,2,3]) == b)
print(b == np.array([1,2,3]))
与えます:
False
False
そのため、スカラー Numpy の「配列」では、__array_priority__
尊重されないようです。