La multiplicación de matrices es una operación fundamental en álgebra lineal.
Generalmente lo usamos en numerosas aplicaciones, como procesamiento de imágenes, aprendizaje automático y muchas más. NumPy es un notable paquete de Python para computación científica.
Sin embargo, en esta publicación, veremos varios métodos para realizar la multiplicación de matrices en Python sin utilizar NumPy.
utilizaremos bucles anidados, la función integrada map() y la comprensión de listas.
Además, veremos los beneficios y los inconvenientes de cada estrategia, así como cuándo aplicar cada una de ellas. Si eres nuevo en el álgebra lineal y quieres aprender más sobre la multiplicación de matrices; sigue leyendo
¿Dónde usamos la multiplicación de matrices?
La multiplicación de matrices se utiliza en gráficos de computadora para alterar imágenes 2D y 3D. Por ejemplo, puede rotar, escalar y trasladar objetos en la pantalla. Las matrices se utilizan en el procesamiento de imágenes para representar imágenes como conjuntos de píxeles. Además, las matrices se pueden utilizar para realizar operaciones como el filtrado de imágenes.
También hacemos uso de matrices en máquina de aprendizaje. Pueden ayudarnos a representar datos y parámetros del modelo. Podemos realizar numerosas operaciones, como calcular productos punto y productos matriz-vector.
Seguramente, esta operación también es muy ventajosa en las operaciones científicas. Podemos usarlo en física e ingeniería para describir cantidades físicas. Por lo tanto, podemos operar con vectores y tensores.
¿Por qué no podemos elegir usar NumPy?
Si bien NumPy es un Biblioteca de Python, no siempre es la opción ideal para la multiplicación de matrices. Es posible que no elijamos usar NumPy por razones como el tamaño y la dependencia, el aprendizaje y los sistemas heredados.
Usar las funciones integradas de Python o desarrollar código personalizado puede ser más eficiente en algunos casos. Sin embargo, es crucial tener en cuenta que NumPy es una biblioteca sólida. Además, también puedes usarlo para la multiplicación de matrices.
Ahora, echemos un vistazo a cómo podemos lograr la multiplicación de matrices sin NumPy.
Método de bucles anidados
La técnica de bucles anidados utiliza bucles anidados para ejecutar la multiplicación de matrices en Python. La función itera sobre cada elemento de la matriz. Y los multiplica usando una serie de bucles anidados. La función devuelve el resultado, que se almacena en una nueva matriz.
Este enfoque es fácil de comprender. Sin embargo, puede que no sea tan eficiente como otras formas, especialmente para matrices más grandes. Sin embargo, es una opción maravillosa para ti si eres nuevo en el álgebra lineal.
def matrix_multiplication(A, B):
# Determine the matrices' dimensions.
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# Establecer la matriz de resultados en ceros.
result = [[0 for row in range(cols_B)] for col in
range(rows_A)]
# Iterate through rows of A
for s in range(rows_A):
# Iterate through columns of B
for j in range(cols_B):
# Iterate through rows of B
for k in range(cols_A):
result[s][j] += A[s][k] * B[k][j]
return result
Veamos un ejemplo de cómo hacer esto. Simplemente puede agregar estas líneas de código a continuación para probar este ejemplo.
# Sample matrices
A = [[1, 4, 3], [4, 9, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Perform matrix multiplication
result = matrix_multiplication(A, B)
# Print the result
print(result)
# Output: [[76, 84], [175, 194]]
Beneficios:
- Fácil de comprender.
- Ideal para principiantes o para aquellos que buscan una comprensión más profunda de la multiplicación de matrices.
Desventajas:
- No es tan efectivo como las técnicas alternativas, particularmente para matrices más grandes.
- No es tan legible como los enfoques alternativos.
método de la función map()
El método de la función map() proporciona un enfoque alternativo para realizar la multiplicación de matrices en Python. En este enfoque, usamos la función integrada map(). Por lo tanto, usamos una herramienta de programación funcional que aplica una función proporcionada a cada elemento iterable (lista, tupla, etc.). Además, la función map() acepta dos parámetros, una función y un iterable. Y devuelve un iterador que aplica la función a cada elemento iterable.
En este enfoque, revisamos cada miembro de la matriz y hacemos la multiplicación usando la función map() anidada.
La función zip() se usa para iterar a través de cada elemento de las matrices en paralelo.
Finalmente, la función sum() se usa para sumar los resultados.
def matrix_multiplication(A, B):
# To get the dimensions of the matrices
rows_A = len(A)
cols_A = len(A[0])
rows_B = len(B)
cols_B = len(B[0])
# We use map() function for multiplication.
result = [[sum(a * b for a, b in zip(row_a, col_b)) for
col_b in zip(*B)] for row_a in A]
return result
Ahora, nuevamente, podemos probar nuestro código con un ejemplo.
# Example matrices
A = [[3, 2, 3], [4, 5, 6]]
B = [[7, 8], [9, 10], [11, 12]]
# Use map() function to perform matrix multiplication
result = list(map(lambda x: list(map(lambda y: sum(i*j
for i,j in zip(x,y)), zip(*B))), A))
# Print the result
print(result)
# Output: [[72, 80], [139, 154]]
Ventajas
- Más eficaz que el enfoque de bucles apilados
- Utiliza programación funcional para simplificar el código.
Desventajas
- Algunas personas que no están familiarizadas con la programación funcional pueden encontrarla menos legible.
- Es menos comprensible que la técnica de bucles anidados.
Método de comprensión de listas
La comprensión de listas le permite generar una nueva lista en una sola línea de código. Por lo tanto, esto es aplicando una expresión a cada miembro de una lista existente.
En este enfoque, la multiplicación se lleva a cabo iterando repetidamente a través de cada miembro de la matriz. Estamos utilizando la comprensión de listas en capas.
# Sample matrices
A = [[1, 12, 3], [14, 5, 6]]
B = [[7, 8], [9, 10], [12, 12]]
# Matrix multiplication using list comprehension
result = [[sum(A[i][k] * B[k][j] for k in range(len(A[0])))
for j in range(len(B[0]))] for i in range(len(A))]
# Print the result
print(result)
[[151, 164], [215, 234]]
Beneficios
- Comparado con el método de la función map(), más corto y más legible.
Desventajas
- Puede ser menos efectivo que usar la función map(), particularmente para matrices grandes.
- Es más difícil que el enfoque de bucles anidados.
Conclusión
En esta publicación, analizamos alternativas al uso de NumPy al multiplicar matrices en Python. Realizamos la multiplicación de matrices en bucles anidados, la función integrada map() y la comprensión de listas.
La mejor estrategia dependerá de las necesidades particulares de su proyecto.
Cada una de las estrategias tiene ventajas y desventajas propias. Para asegurarse de que la función funcione correctamente, es una buena idea agregar algunos casos de prueba con varias dimensiones y valores de matriz.
También debe incluir algunas pruebas de rendimiento para comparar qué tan bien se ejecutan estos métodos.
Deje un comentario