Saltar al contenido

¿Para qué sirve el símbolo ‘@ =’ en Python?

Solución:

De la documentación:

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

los @ El operador se introdujo en Python 3.5. @= es la multiplicación de matrices seguida de una asignación, como era de esperar. Ellos mapean a __matmul__, __rmatmul__ o __imatmul__ similar a como + y += mapa para __add__, __radd__ o __iadd__.

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

@= y @ son nuevos operadores introducidos en Python 3,5 ejecutando multiplicación de matrices. Están destinados a aclarar la confusión que existía hasta ahora con el operador. * que se usó para la multiplicación de 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 * está diseñado para usarse solo para la multiplicación de elementos.

Como se explica en PEP0465, se introdujeron dos operadores:

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

Multiplicación de matrices frente a 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 dará como resultado:

    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 utilizó la siguiente convención:

  • los * El operador (y los operadores aritméticos en general) se definieron como operaciones de elementos en ndarrays y como multiplicación de matrices en el tipo numpy.matrix.

  • método / función dot se utilizó para la multiplicación de matrices de ndarrays

Introducción de la @ El operador hace que el código que involucra multiplicaciones de matrices 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.

@ es el nuevo operador para la multiplicación de matrices agregado en Python3.5

Referencia: https://docs.python.org/3/whatsnew/3.5.html#whatsnew-pep-465

Ejemplo

C = A @ B
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *