Programa Python para multiplicar dos matrices

Tabla de contenido

En este ejemplo, aprenderemos a multiplicar matrices de dos formas diferentes: ciclo anidado y comprenhension de lista anidada

Para comprender este ejemplo, debe tener el conocimiento de los siguientes temas de programación de Python:

  • Python para bucle
  • Lista de Python
  • Matrices de Python y matrices NumPy

En Python, podemos implementar una matriz como lista anidada (lista dentro de una lista).

Podemos tratar cada elemento como una fila de la matriz.

Por ejemplo X = ((1, 2), (4, 5), (3, 6)), representaría una 3x2matriz.

La primera fila se puede seleccionar como X(0). Y, el elemento en la primera fila, la primera columna se puede seleccionar como X(0)(0).

La multiplicación de dos matrices X e Y se define solo si el número de columnas en X es igual al número de filas Y.

Si X es una n x mmatriz e Y es una m x lmatriz, entonces, XY está definido y tiene la dimensión n x l(pero YX no está definido). Aquí hay un par de formas de implementar la multiplicación de matrices en Python.

Código fuente: Multiplicación de matrices usando bucle anidado

# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r) 

Salida

 (114, 160, 60, 27) (74, 97, 73, 14) (119, 157, 112, 23) 

En este programa, hemos utilizado forbucles anidados para recorrer cada fila y cada columna. Acumulamos la suma de productos en el resultado.

Esta técnica es simple pero computacionalmente costosa a medida que aumentamos el orden de la matriz.

Para operaciones matriciales más grandes, recomendamos paquetes de software optimizados como NumPy, que es varias (del orden de 1000) veces más rápido que el código anterior.

Código fuente: Multiplicación de matrices mediante la comprensión de listas anidadas

# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r) 

La salida de este programa es la misma que la anterior. Para comprender el código anterior, primero debemos conocer la función incorporada zip()y la lista de argumentos de descompresión usando el operador *.

Hemos utilizado la comprensión de listas anidadas para recorrer cada elemento de la matriz. El código parece complicado e ilegible al principio. Pero una vez que domine las listas por comprensión, probablemente no volverá a los bucles anidados.

Articulos interesantes...