我遵循了本指南来实现可以通过二进制运算符(如+
、-
、*
等(与np.ndarray
交互的对象
根据我的案例建议,我已经设置了__array_ufunc__ = None
,并实现了像__mul__
和__div__
这样的二进制操作。然而,在这些例子中,__mul__
起作用,而__div__
不起作用。
这是MWE:
import numpy as np
class ArrayLike(object):
__array_ufunc__ = None
def __mul__(self, other):
return 'mul'
def __div__(self, other):
return 'div'
array = np.arange(3)
npnum = np.float32(2.0)
alike = ArrayLike()
alike * array # 'mul'
alike / array # '*** TypeError: operand 'ArrayLike' does not support ufuncs (__array_ufunc__=None)'
alike * npnum # 'mul'
alike / npnum # '*** TypeError: operand 'ArrayLike' does not support ufuncs (__array_ufunc__=None)'
欢迎使用堆栈溢出!
import numpy as np
class ArrayLike(object):
__array_ufunc__ = None
def __mul__(self, other):
return 'mul'
def __truediv__(self, other):
return 'div'
array = np.arange(3)
npnum = np.float32(2.0)
alike = ArrayLike()
alike / npnum # 'div'
请注意,我使用的是__truediv__
而不是__div__
。__div__
不是Python 3的有效魔术方法运算符,仅适用于Python 2。
有关更多信息,请参阅Python 3 Operators
如果这回答了你的问题,一定要把它标记为答案。谢谢