Hola! Si a ti como a mí te apasiona la programación y las matemáticas, encontrarás interesante este programa realizado en Python que involucra un tema demasiado interesante del Algebra Lineal: Las matrices.
La matrices son un conjunto bidimensional de números o símbolos distribuidas de forma rectangular, en lineas verticales y horizontales, de manera que sus elementos se organizan en filas y columnas.
En este caso particular a sumar dos matrices que tengas las mismas dimensiones en filas y columnas. Por ejemplo, la matriz A tiene 3 filas y 3 columnas, entonces decimos que la dimensión de la matriz es 3x3 (tres por tres), por lo tanto la matriz B, tambien debe ser 3x3 para poder sumar cada uno de los items en las mismas posiciones en la matriz A y la matriz B.
matriz1 = [
[1,2,3],
[4,5,6]
]
matriz2 = [
[1,1,1],
[1,1,1]
]
iflen(matriz1) == len(matriz2):
#TODO
else:
print('Las matrices tienen diferente numero de filas y deben ser iguales')
defcolumns_len_equals(matriz):
rows_len_equals = False
init_long = len(matriz[0])
for e in range(len(matriz)):
long = len(matriz[e])
if(init_long == long):
rows_len_equals = Trueelse:
rows_len_equals = Falsereturn rows_len_equals
Aqui estamos declarando una variable booleana que iniciamos en False que va a ser la encargada de definir finalmente si todas las filas de la matriz tienen el mismo número de elementos (True) o no (False).
Luego definimos una variable inicial para recuperar la longitud de la primera fila de la matriz para posteriormente entrar en el ciclo for e iterar cada uno de los elementos para obtener la longitud de cada uno y comparar con ese valor inicial. Si alguna fila de la matriz tiene un número de elementos diferente al de la primera fila, el método retornara un booleano False, de lo contrario, si todos los elementos tienen la misma longitud, retornara un booleano True.
Este booleano de retorno nos va a ser muy útil mas adelante.
def add_matrices(m1, m2):
final_matriz = []
for index inrange(len(m1)):
row_m1 = m1[index]
row_m2 = m2[index]
result_row = []
for index2 inrange(len(row_m1)):
result = row_m1[index2] + row_m2[index2]
result_row.append(result)
final_matriz.append(result_row)
return final_matriz
En esta función iniciamos declarando una lista vacia que es donde vamos a ir almacenando los resultados de cada fila luego de las sumas.
Posterior a ello, creamos un ciclo for anidado donde iniciamos iterando por el index de la matriz 1 (aqui puede ser tambien la matriz 2 ya que ambas tienen la misma cantidad de elementos) y capturamos la misma fila de cada matriz. Luego necesitamos iterar cada uno de los elementos de una de las filas de las dos matrices (yo elegi la fila de la matriz 1 pero puede ser la fila de la matriz 2 ya que tienen la misma longitud).
Estando en el segundo ciclo for, y en base al index de este ciclo, sumamos tanto el elemento de la fila de la matriz 1 como el elemento de la matriz 2 y asi es como alamacenamos el resultado en una lista temporar llamada result_row.
Al finalizar de sumar los elementos respectivos de cada una de las filas, almacenamos esa fila resultante (lista result_now) en la variable declarada inicialmente final_matriz, con ello vamos sumando los elementos de cada una de las filas y las vamos almacenando en una lista final o matriz final, que finalmente es la variable que es retornada en esta funcion.
#Validar longitud de filasif len(matriz1) == len(matriz2):
#Validar longitud de las columnasif(columns_len_equals(matriz1) and columns_len_equals(matriz2)):
final_matriz = add_matrices(matriz1, matriz2)
print('=> Matriz final')
print(final_matriz)
else:
print('Las listas de una de las dos matrices tiene diferente longitud y deben ser iguales')
else:
print('Las matrices tienen diferente numero de filas y deben ser iguales')
De esta manera tenemos un condicional if anidado que nos permite validar que ambas matrices tengan la misma cantidad de columnas (o elementos) en cada una de sus filas (o listas). En caso afirmativo, se suman las matrices y se imprime la matriz final. En caso negativo se imprime un mensaje indicando que las columas de una de las dos matrices o de ambas, todas no tienen la misma longitud.
defcolumns_len_equals(matriz):
rows_len_equals = False
init_long = len(matriz[0])
for e in range(len(matriz)):
long = len(matriz[e])
if(init_long == long):
rows_len_equals = Trueelse:
rows_len_equals = Falsereturn rows_len_equals
defadd_matrices(m1, m2):
final_matriz = []
for index in range(len(m1)):
row_m1 = m1[index]
row_m2 = m2[index]
result_row = []
for index2 in range(len(row_m1)):
result = row_m1[index2] + row_m2[index2]
result_row.append(result)
final_matriz.append(result_row)
return final_matriz
matriz1 = [
[1,2,3],
[4,5,6]
]
matriz2 = [
[1,1,1],
[1,1,1]
]
#Validar longitud de filasif len(matriz1) == len(matriz2):
#Validar longitud de las columnasif(columns_len_equals(matriz1) and columns_len_equals(matriz2)):
final_matriz = add_matrices(matriz1, matriz2)
print('=> Matriz final')
print(final_matriz)
else:
print('Las listas de una de las dos matrices tiene diferente longitud y deben ser iguales')
else:
print('Las matrices tienen diferente numero de filas y deben ser iguales')
=> Matriz final
[[2, 3, 4], [5, 6, 7]]
Cuentame que te parecio; pensaste en una forma diferente de hacerlo o en algúna mejora para el programa. Estaré muy agradecido de tu retroalimentación.
¡Saludos! 😃
Hola amigos!
Haciendo el curso de manipulación y transformación de datos con Pandas y Numpy, encontre una forma de hacer este mismo programa con Numpy, la cual requiere menos codigo.
import numpy as np matriz1 = np.array([[1,2,3], [4,5,6]]) matriz2 = np.array([[1,1,1], [1,1,1]]) rows_m1, cols_m1 = matriz1.shape rows_m2, cols_m2 = matriz2.shape if(rows_m1 == rows_m2 and cols_m1 == cols_m2): print('La suma es => ', matriz1 + matriz2) else: print('Una de las dos matrices tiene diferente longitud y deben ser iguales')
Resultadoi
La suma es => [[2 3 4] [5 6 7]]
Fue una experiencia enriquecedora solucionar el mismo problema de dos formas.