【发布时间】:2018-12-12 21:53:16
【问题描述】:
在一个项目中,我创建了一个类,我需要在这个新类和一个真实矩阵之间进行运算,所以我像这样重载了__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的类型感觉如何?