Sé que @
es para decoradores, pero ¿ @=
para qué sirve Python? ¿Es solo una reserva para alguna idea futura?
Esta es solo una de mis muchas preguntas mientras leo tokenizer.py
.
python
python-3.x
operators
matrix-multiplication
python-3.5
Octavia Togami
fuente
fuente
:=
operador de morsa de Python 3.8, obtienes lo que se conoce como el@:=
operador de rosa espinosa. (O en Japón se le conoce como el operador de morsa de Elvis.)Respuestas:
De la documentación :
El
@
operador se introdujo en Python 3.5.@=
es la multiplicación matricial seguida de la asignación, como era de esperar. Se asignan a__matmul__
,__rmatmul__
o__imatmul__
similar a cómo+
y se+=
asignan a__add__
,__radd__
o__iadd__
.El operador y la justificación detrás de esto se discuten en detalle en PEP 465 .
fuente
@=
y@
son nuevos operadores introducidos en Python 3.5 que realizan la multiplicación de matrices . Su objetivo es aclarar la confusión que existía hasta ahora con el operador*
que se usó para la multiplicación por elementos o la multiplicación de matrices, según la convención empleada en esa biblioteca / código en particular. Como resultado, en el futuro, el operador*
debe usarse solo para la multiplicación por elementos.Como se explica en PEP0465 , se presentaron dos operadores:
A @ B
, utilizado de manera similar aA * B
A @= B
, utilizada de manera similar aA *= B
Multiplicación matricial vs Multiplicación por elementos
Para resaltar rápidamente la diferencia, para dos matrices:
La multiplicación por elementos sabios producirá:
La multiplicación de matrices producirá:
Uso en Numpy
Hasta ahora, Numpy usó la siguiente convención:
el
*
operador (y los operadores aritméticos en general) se definieron como operaciones basadas en elementos en ndarrays y como multiplicación matricial en el tipo numpy.matrix .dot
Se utilizó el método / función para la multiplicación matricial de ndarraysLa introducción del
@
operador hace que el código que involucra multiplicaciones matriciales sea mucho más fácil de leer. PEP0465 nos da un ejemplo:Claramente, la última implementación es mucho más fácil de leer e interpretar como una ecuación.
fuente
@
se ha implementado paralist
, que no es el caso.@
está asociado connp.matmul
, nonp.dot
. Los dos son similares pero no iguales.@ es el nuevo operador para Matrix Multiplication agregado en Python3.5
Referencia: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465
Ejemplo
fuente