Tôi đang cố gắng phân lớp một mảng mờ nhưng tôi không thể thực hiện đúng các thao tác với các kiểu khác như mảng mặt nạ hoặc ma trận. Dường như với tôi rằng __array_priority__ không được tôn trọng. Như một ví dụ, tôi đã tạo ra một lớp giả rằng mimicks những khía cạnh quan trọng:Lớp có nguồn gốc từ mảng numpy không hoạt động tốt với ma trận và mảng bị che dấu
import numpy as np
class C(np.ndarray):
__array_priority__ = 15.0
def __mul__(self, other):
print("__mul__")
return 42
def __rmul__(self, other):
print("__rmul__")
return 42
Operations giữa lớp học của tôi và bình thường việc ndarray như mong đợi:
>>> c1 = C((3, 3))
>>> o1 = np.ones((3, 3))
>>> print(o1 * c1)
__mul__
42
>>> print(c1 * o1)
__rmul__
42
Tuy nhiên, khi tôi cố gắng để vận hành với ma trận (hoặc mảng mặt nạ) ưu tiên mảng không được tôn trọng.
>>> m = np.matrix((3, 3))
>>> print(c1 * m)
__mul__
42
>>> print(m * c1)
Traceback (most recent call last):
...
File "/usr/lib64/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 330, in __mul__
return N.dot(self, asmatrix(other))
ValueError: objects are not aligned
Dường như với cách mà các gói được bọc cho ma trận và mảng mặt nạ không được ưu tiên mảng ưu tiên. Đây có phải là trường hợp không? Có cách giải quyết nào không?
Trên thực tế, thông báo lỗi được đưa ra vì họ không thẳng hàng, vì 'np.matrix ((3, 3)) 'không giống với' np.asmatrix (np.ones ((3, 3))) '. Tuy nhiên, vấn đề vẫn tồn tại, ngoại trừ 'm * c1' là một vấn đề không hoạt động. –
@GustavLarsson Cảm ơn vì đã phát hiện ra điều đó. Tôi đã sửa nó và thêm thông tin vào động cơ. – Hernan