# Ejemplo: Introducir datos en una matrices (Listas y numpy)

## Enunciado

Se crearán dos matrices de las mismas dimensiones. El número de filas, columnas y sus valores se le preguntarán al usuario, estos datos deben ser enteros y positivos., que previamente se le pedirá al usuario la cantidad de filas y columnas que tendrá.

* Calcular y visualizar la matriz Suma.
* Calcular y visualizar la matriz Multiplicación.
* Visualizar el valor más alto de cada una de las matrices utilizadas.

![](https://156834076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3CsDMenpAVuNy6kou5%2F-M5aYUSESwC8Y4E0ssyH%2F-M5aba8hDtey7dlH94ED%2Fmatriz_filas.jpg?alt=media\&token=52b51bbe-9b79-4e10-b79e-8850207e4b66)

## Análisis:

* Pedir el número de columnas y filas, verificar que sea un dato válido, entero y mayor que 0.
* Pedir los datos de la matrices, estos, deben ser enteros y mayor que cero.
* Calcular la matriz suma y multiplicación.
* Localizar el máximo de cada una de las matrices utilziadas.
* Imprimir los resultados

#### Diagrama

![](https://156834076-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M3CsDMenpAVuNy6kou5%2F-M3l8jR6Yl0FY6aTEWBQ%2F-M3l92yI-d63Lw07cj2i%2Forigen.jpg?alt=media\&token=d4bce9f7-65dc-4e75-b64c-18f3bb035c54)

## Solución utilizando listas y `numpy`

## Código con listas

```python
# Rellenar matriz
def pedir_datos (dato):
    valor=-1
    while valor<0:
        try:
            valor=int(input(dato))
            if valor<0:
                print("Os datos deben de ser positivos.")
        except:
            print("Tecleaste un caracter no válido.")
    return valor
def imprimir_matriz(mensaje1,matriz):
    mensaje=mensaje1 + "\n"+"\t"
    for i in range(len(matriz)):
        for j in range(len(matriz[i])):
            mensaje+=str(matriz[i][j])+ "\t"
        mensaje+="\n"+"\t"
    print(mensaje)
def localizar_mayor(mensaje, matriz):
    mayor=matriz[0][0]
    for i in range(len(matriz)):
        for j in range(len(matriz[i])):
            if matriz[i][j] > mayor:
                mayor=matriz[i][j]

    mensaje="El valor más alto de "+ mensaje +str(mayor)
    return mensaje
#Inicializar las matrices
matriz1,matriz2,suma,multi=[],[],[],[]
matriz2=[]
#Pedir el número de filas y columnas al usuario
filas=pedir_datos("Dame la cantidad de filas: ")
columnas=pedir_datos("Dame la cantidad de columnas: ")
#Pedirle los valores al usuario de la primera matriz
print("Pedir datos de la matriz 1")
for i in range(filas):
   matriz1.append([])
   for j in range(columnas):
          matriz1[i].append(pedir_datos("Dame el dato de la matriz 1: fila {} y columna {}: ".format(i+1,j+1)))
##Pedirle los valores al usuario de la primera matriz
print("Pedir datos de la matriz 2")
for i in range(filas):
    matriz2.append([0]*columnas)
    for j in range(columnas):
        matriz2[i][j]=pedir_datos("Dame el dato de la matriz 2: fila {} y columna {}: ".format(i+1,j+1))
#Pedirle los valores al usuario de la primera matriz
#Suma de dos matrices
for i in range(filas):
    suma.append([0]*columnas)
    for j in range(columnas):
        suma[i][j]=matriz1[i][j]+matriz2[i][j]
for i in range(filas):
    multi.append([0]*columnas)
    for j in range(columnas):
        multi[i][j]=matriz1[i][j]*matriz2[i][j]


#Imprimir los resultados
print("Resultados")
imprimir_matriz("Matriz 1:",matriz1)
imprimir_matriz("Matriz 2:",matriz2)
imprimir_matriz("Suma:",suma)
imprimir_matriz("Multiplicación:",multi)
#Localiza el valor más alto de cada una de las matrices
print(localizar_mayor("matriz 1 es:", matriz1))
print(localizar_mayor("matriz 2 es:", matriz2))
print(localizar_mayor("Suma es:", suma))
print(localizar_mayor("Multiplicación es:", multi))
```

## Código utilizando `numpy`

### Importando `from numpy import *`

```python
from numpy import *

def pedir_datos (dato):
    valor=-1
    while valor<0:
        try:
            valor=int(input(dato))
            if valor<0:
                print("Os datos deben de ser positivos.")
        except:
            print("Tecleaste un caracter no válido.")
    return valor
def imprimir_matriz(mensaje1,matriz):
    mensaje=mensaje1 + "\n"+"\t"
    for i in range(len(matriz)):
        for j in range(len(matriz[i])):
            mensaje+=str(matriz[i][j])+ "\t"
        mensaje+="\n"+"\t"
    print(mensaje)
def localizar_mayor(mensaje, matriz):
    mayor=matriz.max()
    mensaje="El valor más alto de "+ mensaje +str(mayor)
    return mensaje
#Inicializar las matrices
filas=pedir_datos("Dame la cantidad de filas: ")
columnas=pedir_datos("Dame la cantidad de columnas: ")
#Inicializar la matriz vacia
matriz1=empty([filas,columnas])
matriz2=empty([filas,columnas])
suma=empty([filas,columnas])
multi=empty([filas,columnas])
for i in range(filas):
    for j in range(columnas):
          matriz1[i,j]=pedir_datos("Dame el dato de la matriz 1: fila {} y columna {}: ".format(i+1,j+1))
for i in range(filas):
     for j in range(columnas):
        matriz2[i][j]=pedir_datos("Dame el dato de la matriz 2: fila {} y columna {}: ".format(i+1,j+1))
#Calcula la suma de matricex
suma=matriz1+matriz2
multi=dot(matriz1,matriz2)

#Imprimir los resultados
imprimir_matriz("Matriz 1:",matriz1)
imprimir_matriz("Matriz 2:",matriz2)
imprimir_matriz("Suma:",suma)
imprimir_matriz("Multiplicación:",multi)
#Localiza el valor más alto de cada una de las matrices
print(localizar_mayor("Matriz 1, ", matriz1))
print(localizar_mayor("Matriz 2, ", matriz2))
print(localizar_mayor("Suma, ", suma))
```

### Importando `import numpy as np`

```python
import numpy as np
def pedir_datos (dato):
    valor=-1
    while valor<0:
        try:
            valor=int(input(dato))
            if valor<0:
                print("Os datos deben de ser positivos.")
        except:
            print("Tecleaste un caracter no válido.")
    return valor
def imprimir_matriz(mensaje1,matriz):
    mensaje=mensaje1 + "\n"+"\t"
    for i in range(len(matriz)):
        for j in range(len(matriz[i])):
            mensaje+=str(matriz[i][j])+ "\t"
        mensaje+="\n"+"\t"
    print(mensaje)
def localizar_mayor(mensaje, matriz):
    mayor=np.max(matriz)
    mensaje="El valor más alto de "+ mensaje +str(mayor)
    return mensaje
#Inicializar las matrices
filas=pedir_datos("Dame la cantidad de filas: ")
columnas=pedir_datos("Dame la cantidad de columnas: ")
#Inicializar la matriz vacia
matriz1=np.empty([filas,columnas])
matriz2=np.empty([filas,columnas])
suma=np.empty([filas,columnas])
multi=np.empty([filas,columnas])
for i in range(filas):
    for j in range(columnas):
          matriz1[i,j]=pedir_datos("Dame el dato de la matriz 1: fila {} y columna {}: ".format(i+1,j+1))
for i in range(filas):
     for j in range(columnas):
        matriz2[i][j]=pedir_datos("Dame el dato de la matriz 2: fila {} y columna {}: ".format(i+1,j+1))
#Calcula la suma de matricex
suma=matriz1+matriz2
multi=np.dot(matriz1,matriz2)

#Imprimir los resultados
imprimir_matriz("Matriz 1:",matriz1)
imprimir_matriz("Matriz 2:",matriz2)
imprimir_matriz("Suma:",suma)
imprimir_matriz("Multiplicación:",multi)
#Localiza el valor más alto de cada una de las matrices
print(localizar_mayor("Matriz 1, ", matriz1))
print(localizar_mayor("Matriz 2, ", matriz2))
print(localizar_mayor("Suma, ", suma))
```

{% hint style="warning" %}
Si pudieras elegir, ¿Cuál es la solución más óptima?

¿Qué error tiene el programa?
{% endhint %}
