Trong một dự án, tôi đã tạo ra một lớp, và tôi cần một hoạt động giữa lớp mới này và một ma trận thực, vì vậy tôi bị quá tải các __rmul__
chức năng như thế nàyArray và __rmul__ nhà điều hành trong Python NumPy
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
nhưng khi tôi gọi nó, kết quả là không phải những gì tôi mong đợi
A = [[i*j for i in np.arange(2) ] for j in np.arange(3)]
A = np.array(A)
R = foo()
C = A * R
Output:
0
0
0
1
0
2
tôi t dường như chức năng này được gọi là 6 lần, một lần cho mỗi phần tử.
Thay vào đó, __mul__
chức năng làm việc rất
C = R * A
Output:
[[0 0]
[0 1]
[0 2]]
Nếu A
không phải là một mảng, nhưng chỉ có một danh sách liệt kê, cả hai làm việc tốt
A = [[i*j for i in np.arange(2) ] for j in np.arange(3)]
R = foo()
C = A * R
C = R * A
Đầu ra
[[0, 0], [0, 1], [0, 2]]
[[0, 0], [0, 1], [0, 2]]
Tôi thực sự muốn chức năng __rmul__
của mình để hoạt động trên mảng (hàm nhân bản gốc của tôi không giao hoán). Làm thế nào tôi có thể giải quyết nó?
Bạn cảm thấy thế nào về việc kiểm tra loại 'A'? –