在一个项目中,我创建了一个类,并且我需要在这个新类和一个实际矩阵之间进行操作,所以我重载了
但是当我调用它时,结果并不是我预期的。
如果
__rmul__
函数,如下所示。class foo(object):
aarg = 0
def __init__(self):
self.aarg = 1
def __rmul__(self,A):
print(A)
return 0
def __mul__(self,A):
print(A)
return 0
但是当我调用它时,结果并不是我预期的。
A = [[i*j for i in np.arange(2) ] for j in np.arange(3)]
A = np.array(A)
R = foo()
C = A * R
输出:
0
0
0
1
0
2
看起来该函数被调用了6次,每个元素都调用了一次。
相反,__mul__
函数工作得非常好。
C = R * A
输出:
[[0 0]
[0 1]
[0 2]]
如果
A
不是一个数组,而只是一个列表的列表,两种方式都可以正常工作。A = [[i*j for i in np.arange(2) ] for j in np.arange(3)]
R = foo()
C = A * R
C = R * A
输出
[[0, 0], [0, 1], [0, 2]]
[[0, 0], [0, 1], [0, 2]]
我希望我的 __rmul__
函数也能用于数组上(我的原始乘法函数不可交换)。我该如何解决?
A
的类型有何感觉? - John Perry