3 ответов:
The
@(at) оператор предназначен для использования для умножения матрицы. Никакие встроенные типы Python не реализуют этот оператор.The
@оператор был введен в Python 3.5.@=умножение матрицы с последующим назначением, как и следовало ожидать. Они сопоставляются с__matmul__,__rmatmul__или__imatmul__как+и+=карта__add__,__radd__или__iadd__.оператор и обоснование этого подробно обсуждаются в PEP 465.
@=и@вводятся ли новые операторы в Python 3.5 выполняя умножение матриц. Они предназначены для прояснения путаницы, которая существовала до сих пор с оператором*который использовался либо для поэлементного умножения, либо для матричного умножения в зависимости от соглашения, используемого в этой конкретной библиотеке/коде. В результате, в будущем, оператор*предназначен для использования только для поэлементного умножения.как поясняется в PEP0465, были введены два оператора:
- новый бинарный оператор
A @ B, используется так же, какA * B- версия на месте
A @= B, используется так же, какA *= Bумножение матрицы против поэлементного умножения
быстро выделить разницу, для двух матриц:
A = [[1, 2], B = [[11, 12], [3, 4]] [13, 14]]
поэлементное умножение будет выход:
A * B = [[1 * 11, 2 * 12], [3 * 13, 4 * 14]]умножение матрицы даст:
A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14], [3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]использование в Numpy
до сих пор Numpy использовал следующее соглашение:
the
*оператор (и арифметические операторы в целом) были определены как поэлементные операции над ndarrays а как матрица-умножение на numpy.матрица тип.метод/функция
dotиспользовался для матричного умножения ndarraysвведение
@оператор делает код, включающий матричные умножения, намного проще для чтения. PEP0465 дает нам пример:# 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)очевидно, что последняя реализация намного легче читать и интерпретировать как уравнение.
@ - это новый оператор для умножения матриц, добавленный в Python3. 5
Ссылка:https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
пример
C = A @ B
Comments