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 * BA @= B, utilizada de manera similar aA *= BMultiplicació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 .dotSe 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