@=
và @
là các toán tử mới được giới thiệu trong phép nhân ma trận thực hiện Python 3.5 . Chúng có nghĩa là để làm rõ sự nhầm lẫn tồn tại cho đến nay với toán tử được sử dụng cho phép nhân phần tử hoặc nhân ma trận tùy thuộc vào quy ước được sử dụng trong thư viện / mã cụ thể đó. Kết quả là, trong tương lai, toán tử chỉ được sử dụng cho phép nhân phần tử.*
*
Như đã giải thích trong PEP0465 , hai toán tử đã được giới thiệu:
- Một toán tử nhị phân mới
A @ B
, được sử dụng tương tự nhưA * B
- Một phiên bản tại chỗ
A @= B
, được sử dụng tương tự nhưA *= B
Phép nhân ma trận so với phép nhân nguyên tố
Để nhanh chóng làm nổi bật sự khác biệt, cho hai ma trận:
A = [[1, 2], B = [[11, 12],
[3, 4]] [13, 14]]
Phép nhân nguyên tố sẽ mang lại:
A * B = [[1 * 11, 2 * 12],
[3 * 13, 4 * 14]]
Phép nhân ma trận sẽ mang lại:
A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14],
[3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]
Sử dụng trong Numpy
Cho đến nay, Numpy đã sử dụng quy ước sau:
Giới thiệu @
toán tử làm cho mã liên quan đến phép nhân ma trận dễ đọc hơn nhiều. PEP0465 cho chúng ta một ví dụ:
# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))
# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)
# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)
Rõ ràng, việc thực hiện cuối cùng là dễ dàng hơn nhiều để đọc và giải thích như một phương trình.