Breaking

Post Top Ad

Your Ad Spot

martes, 17 de diciembre de 2019

Programa Python para multiplicar dos matrices

En este ejemplo, aprenderemos a multiplicar matrices usando dos formas diferentes: bucle anidado y comprensión de lista anidada
Para comprender este ejemplo, debe tener conocimiento de los siguientes temas de programación de Python :
  • Python para Loop
  • Lista de Python
  • Matrices 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 y Y se define sólo si el número de columnas de X es igual al número de filas de 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 matricial usando Nested Loop

  1. # Program to multiply two matrices using nested loops
  2. # 3x3 matrix
  3. X = [[12,7,3],
  4. [4 ,5,6],
  5. [7 ,8,9]]
  6. # 3x4 matrix
  7. Y = [[5,8,1,2],
  8. [6,7,3,0],
  9. [4,5,9,1]]
  10. # result is 3x4
  11. result = [[0,0,0,0],
  12. [0,0,0,0],
  13. [0,0,0,0]]
  14. # iterate through rows of X
  15. for i in range(len(X)):
  16. # iterate through columns of Y
  17. for j in range(len(Y[0])):
  18. # iterate through rows of Y
  19. for k in range(len(Y)):
  20. result[i][j] += X[i][k] * Y[k][j]
  21. for r in result:
  22. print(r)
Ejecutar código
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 de matriz 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 matricial utilizando la comprensión de la lista anidada

  1. # Program to multiply two matrices using list comprehension
  2. # 3x3 matrix
  3. X = [[12,7,3],
  4. [4 ,5,6],
  5. [7 ,8,9]]
  6. # 3x4 matrix
  7. Y = [[5,8,1,2],
  8. [6,7,3,0],
  9. [4,5,9,1]]
  10. # result is 3x4
  11. result = [[sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)] for X_row in X]
  12. for r in result:
  13. print(r)
Ejecutar código
La salida de este programa es la misma que la anterior. Para comprender el código anterior, primero debemos conocer la función incorporadazip() y la lista de argumentos de desempaquetado con el operador *.
Hemos utilizado la comprensión de la lista anidada para recorrer cada elemento de la matriz. El código parece complicado e ilegible al principio. Pero una vez que domine las comprensiones de listas, probablemente no volverá a los bucles anidados.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas