Multiplicación de matrices en pandas

Olorunfemi Akinlua 21 junio 2023
  1. Multiplicación de Matrices
  2. Comprobar si los marcos de datos están alineados en Pandas
  3. Usa la Función punto para Realizar la Multiplicación de Matrices en Pandas
Multiplicación de matrices en pandas

La multiplicación de matrices se usa ampliamente para comprender la relación de redes, la transformación del sistema de coordenadas, el modelado de números y los cálculos de inventario, entre otras cosas. Con datos numéricos basados en fila-columna, podemos realizar la multiplicación de matrices y usar el resultado en cualquier área aplicable.

Pandas y Numpy tienen herramientas y funciones que permiten el uso de matrices y operaciones como multiplicación, inversión, etc. La multiplicación de matrices en Pandas puede ser un poco confusa (y generar errores) si no conoce las matemáticas subyacentes que la impulsan.

En este artículo, discutiremos cómo hacer la multiplicación de matrices en pandas y cómo evitar errores.

Multiplicación de Matrices

Para llevar a cabo la multiplicación de matrices, debemos asegurarnos de que las dos matrices involucradas estén alineadas (o sean apropiadas) para la operación. Una matriz tiene filas y columnas; cuando queremos multiplicar 2 matrices, el número de columnas y filas importa para que sea posible.

Describimos las matrices a sus “filas” y “columnas”, por ejemplo, una matriz de 2 x 4 tiene 2 filas y 4 columnas. Con toda esta información, el número de columnas de la primera matriz (matriz izquierda) debe ser igual al número de filas de la segunda matriz (matriz derecha) para que la multiplicación de matrices sea posible.

Por tanto, una matriz 2 x 3 se puede multiplicar por 3 x 2 porque hay 3 columnas en la primera matriz y 3 filas en la segunda matriz. Además, una matriz 3 x 4 se puede multiplicar por una matriz 4 x 23 porque el número de columnas en la primera matriz es igual al número de filas en la segunda matriz - 4.

Sin embargo, si cambiamos (o invertimos) qué matriz es la primera, es posible que la multiplicación de matrices no sea posible. Usando los mismos ejemplos anteriores, la matriz 3 x 2 se puede multiplicar por la matriz 2 x 3 porque el número de columnas de la primera columna es igual al número de filas de la segunda matriz.

Para el segundo ejemplo, la matriz 4 x 23 se puede multiplicar por la matriz 3 x 4 porque el número de columnas - 23 - de la 1ª matriz no es igual al número de filas - 3 - de la segunda matriz.

Comprobar si los marcos de datos están alineados en Pandas

Podemos comprobar si los marcos de datos que tenemos pueden realizar operaciones matriciales comprobando si la forma de los marcos de datos (matriz) se ajusta a la regla establecida para la multiplicación de matrices. Para lograr esto, accederemos a la propiedad shape (una tupla con dos elementos) del dataframe y compararemos el valor de la columna (el segundo valor dentro de la tupla) del primer dataframe (matriz) con el valor de la fila (el primer valor dentro de la tupla) para el segundo marco de datos (matriz).

Vamos a crear dos marcos de datos, df y otros, comprobar su forma y compararla.

Código:

import pandas as pd
import numpy as np

df = pd.DataFrame([[23, 33], [33, 41]])
other = pd.DataFrame([[31, 0], [20, 1]])

print(df)
print(other)

Producción :

    0   1
0  23  33
1  33  41

    0  1
0  31  0
1  20  1

Ahora, verifiquemos la forma y comparemos para ver si los marcos de datos pueden realizar cálculos de multiplicación de matrices.

print(df.shape)
print(other.shape)

if df.shape[1] == other.shape[0]:
    print("DataFrames (matrices) align and therefore matrix multiplication possible.")
else:
    print(
        "DataFrames (matrices) don't align and therefore matrix multiplication not possible."
    )

Producción :

(2, 2)
(2, 2)
DataFrames (matrices) align and therefore matrix multiplication is possible.

Como puede ver, los marcos de datos se alinean porque los números de columnas en df son iguales a las filas en otros. Ahora podemos usar la función diseñada para la multiplicación de matrices - dot().

Usa la Función punto para Realizar la Multiplicación de Matrices en Pandas

Pandas y Numpy tienen una función dot() que podemos usar para la multiplicación de matrices. Usaremos ambos para mostrar cómo llevar a cabo la multiplicación de matrices.

Usando los marcos de datos que creamos en la sección anterior, podemos ilustrar cómo usar la función dot(). Empecemos con la multiplicación de matrices en df y other.

Usando la función dot() de pandas donde la función se aplica en la primera matriz - df - y la segunda matriz - otro - se pasa como argumento a la función dot() como se muestra a continuación.

print(df.dot(other))

Producción :

      0   1
0  1373  33
1  1843  41

Si vamos a usar la función numpy dot(), pasamos dos argumentos, las dos matrices, pero la primera matriz se pasa primero.

print(np.dot(df, other))

Producción :

[[1373   33]
 [1843   41]]

Trabajemos con otros dos marcos de datos, df1 y df2, creados aleatoriamente usando la biblioteca numpy y realicemos la multiplicación de matrices usando las dos funciones dot().

Código:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])

print(np.dot(df1, df2))
print(df1.dot(df2))

Producción :

[[ 1.28220783 -1.36789201  0.16335459]
 [-0.8039172   0.87851003 -0.32282877]
 [ 1.09767978 -0.71870817 -0.23485835]]

-----
...
ValueError: matrices are not aligned

La primera función dot() que usaba la biblioteca numpy funcionó sin errores, pero la segunda función dot() que usaba la biblioteca pandas no daba el mensaje de error ValueError: las matrices no están alineadas.

El motivo de este mensaje de error es que cuando se ejecuta la función pandas dot(), vuelve a indexar df1 y df2 de tal manera que el orden de columna de df1 y el orden de fila (índice) de df2 no coincide resultando en una desalineación de matrices. La función Numpy dot() no hace mucho y no tiene errores.

Para solucionar este error, necesitaremos alinear los dos marcos de datos asignando el índice del segundo marco de datos - df2 - a las columnas del primer marco de datos - df1.

Código:

import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list("ABC"), index=[1, 2, 3])

print(np.dot(df1, df2))

df2.index = df1.columns
print(df1.dot(df2))

Producción :

[[ 1.28220783 -1.36789201  0.16335459]
 [-0.8039172   0.87851003 -0.32282877]
 [ 1.09767978 -0.71870817 -0.23485835]]

          A         B         C
1  1.282208 -1.367892  0.163355
2 -0.803917  0.878510 -0.322829
3  1.097680 -0.718708 -0.234858

Ahora, no tenemos errores, y ambos cálculos de multiplicación de matrices funcionan independientemente.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn