tipos simbolos imprimir float else ejemplos datos python python-3.x operators matrix-multiplication python-3.5

simbolos - ¿Para qué sirve el símbolo ''@='' en Python?



string en python (3)

@ 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

C = A @ B

Sé que @ es para decoradores, pero ¿para qué sirve @= en Python? ¿Es solo una reserva para alguna idea futura?

Esta es solo una de mis muchas preguntas mientras leo tokenizer.py .


De the documentation :

El operador @ (at) está destinado a ser utilizado para la multiplicación de matrices. Ningún tipo de Python incorporado implementa este operador.

El operador @ se introdujo en Python 3.5. @= es una multiplicación matricial seguida de una asignación, como era de esperar. Se asignan a __matmul__ , __rmatmul__ o __imatmul__ similar a cómo + y += asignan a __add__ , __radd__ o __iadd__ .

El operador y la razón detrás de esto se discuten en detalle en PEP 465 .


@= 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 utilizó 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:

  • Un nuevo operador binario A @ B , utilizado de manera similar a A * B
  • Una versión in situ A @= B , utilizada de manera similar a A *= B

Multiplicación matricial vs Multiplicación por elementos

Para resaltar rápidamente la diferencia, para dos matrices:

A = [[1, 2], B = [[11, 12], [3, 4]] [13, 14]]

  • La multiplicación por elementos sabios producirá:

    A * B = [[1 * 11, 2 * 12], [3 * 13, 4 * 14]]

  • La multiplicación de matrices producirá:

    A @ B = [[1 * 11 + 2 * 13, 1 * 12 + 2 * 14], [3 * 11 + 4 * 13, 3 * 12 + 4 * 14]]

Uso en Numpy

Hasta ahora, Numpy usó la siguiente convención:

La 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:

# 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)

Claramente, la última implementación es mucho más fácil de leer e interpretar como una ecuación.