class Tensor:
def __init__(self, value, requires_grad=False, local_gradients=None):
self.value = value
def __add__(self, other):
print("adding")
other = other if isinstance(other, Tensor) else Tensor(other)
value = self.value + other.value
return Tensor(value)
def __radd__(self, other):
print("radding")
other = other if isinstance(other, Tensor) else Tensor(other)
value = self.value + other.value
return Tensor(value)
@staticmethod
def ones(shape):
return Tensor(np.ones(shape))
a = np.random.randn(4, 3, 2, 1)
b = Tensor.ones((3, 2, 1))
b + a
a + b
我们得到以下结论
adding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
radding
我们看到__add__
它被执行了一次。正如我想要的那样。但是__radd__
它被执行了 24 次(数组中有 24 个元素),所以它似乎是__radd__
逐个元素地执行的。这不是我们所期望的。有什么方法可以纠正这种行为吗?