Está en la página 1de 41

Fundamentos de

programación

Unidad seis: operaciones


con matrices y try/except
AGE N D A

01  Objetivos de aprendizaje

02  Operaciones con matrices

03  Errores

04  try/except
01
Objetivos de aprendizaje

• Objetivo general:
Introducir los conceptos básicos de operaciones con matrices
en sus diferentes formas de hacerlo, así como introducir el
manejo de errores en un programa.

• Objetivos específicos
• Conocer la forma de realizar operaciones básicas con
matrices.
• Conocer librerías y herramientas que permiten realizar
operaciones sobre conjuntos de datos.
• Entender el concepto de control sobre un programa a
través del control de errores.
// F u n d a m e n t o s d e P r o g r a m a c i ó n
Fundamentos de
programación

Carpintería
Operaciones básicas con matrices
02
Matrices - Repaso

¿Qué es una matriz?


A B C D E
F G H I J
M= K L M N Ñ Filas
O P Q R S
T U V Q R

Columnas • Lista de listas


• Lista multidimensional
• Arreglo de arreglos
02
Matrices - Repaso

¿Qué es una matriz?


A B C D E Mij
F G H I J Elemento de M en:
M= K L M N Ñ Filas * Fila i
* Columna j
O P Q R S
T U V Q R

Columnas
02
Matrices - Repaso

¿Qué es una matriz?


A B C D E M02 = ‘C’
F G H I J
M= K L M N Ñ Filas M24 = ‘Ñ’
O P Q R S
T U V W X M35 = ERROR

Columnas
M = [ [’A’, ’B’, ’C’, ’D’, ’E’],
[’F’, ’G’, ’H’, ’I ’, ’J’],
[’K’, ’L’, ’M’, ’N’,’Ñ’],
[’O’, ’P’, ’Q’, ’R’, ’S’],
[’T’, ’U’, ’V’, ’W’, ’X’] ]
02
Matrices - Suma
Restricciones:
• A, B deben tener el mismo tamaño.

2 4 6 1 2 1
1 2 3 3 4 5
A= B=
5 7 2 6 3 2
1 0 2 1 1 1

2 4 6 1 2 1 3 6 7
1 2 3 3 4 5 4 6 8
+ =
5 7 2 6 3 2 11 10 4
1 0 2 1 1 1 2 1 3

A B C
02
Matrices - Suma
Restricciones:
• A, B deben tener el mismo tamaño.

A = [[2, 4, 6], [1, 2, 3], [5, 7, 2], [1, 0, 2]] A[1] = [1, 2, 3]
B = [[1, 2, 1], [3, 4, 5], [6, 3, 2], [1, 1, 1]] A[1][2] = 3
C = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

para i = 0; < largo(A); +1


para j = 0; < largo(A[i]); +1
C[i][j] = A[i][j] + B[i][j]
finpara
finpara ¿ Y la resta?
mostrar C ¿Cómo la haría?
02
Matrices – Multiplicación por escalar

2 4 6
1 2 3
A= B= 3
5 7 2
1 0 2

2 4 6 6 12 18
1 2 3 3 6 9
*3 =
5 7 2 15 21 6
1 0 2 3 0 6

A B C
02
Matrices – Multiplicación por escalar

A = [[2, 4, 6], [1, 2, 3], [5, 7, 2], [1, 0, 2]]


B=3
C = [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

para i = 0; < largo(A); +1


para j = 0; < largo(A[i]); +1
C[i][j] = A[i][j] * B
finpara
finpara
mostrar C
02
Matrices – Multiplicación

4 6
7 2 6 3 2
A= B=
0 2 1 1 1

4*6 + 6*1 4*3 + 6*1 4*2 + 6*1


7*6 + 2*1 7*3 + 2*1 7*2 + 2*1
4 6 0*6 + 2*1 0*3 + 2*1 0*2 + 2*1
6 3 2
7 2 * = 30 18 14
1 1 1
0 2 44 23 16
A B 2 2 2

C
02
Matrices – Multiplicación

B 6 3 2
1 1 1

4 6 30 18 14
7 2 44 23 16
0 2 2 2 2
A C
02
Matrices – Multiplicación
Restricciones:
• A debe tener un numero de columnas igual al numero de filas de B
• Amp * Bpn = Cmn

para i = 0; <m; +1
A = [[4, 6], [7, 2], [0, 2]]
m=3
para j = 0; < n; +1
B = [[6, 3, 2], [1, 1, 1]] C[i][j] = 0
n=3 para k = 0; < p; +1
C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
p=2
C[i][j] = C[i][j] + A[i][k] * B[k][j]
fin para
fin para
fin para
mostrar C
02
Matrices - Transpuesta

4 6
A= 4 7 0
7 2 At=
6 2 2
0 2
A = [[4, 6], [7, 2], [0, 2]]
At = [[0, 0, 0], [0, 0, 0]]

para i = 0; < largo(A); +1


para j = 0; < largo(A[i]); +1
At[j][i] = A[i][j]
finpara
finpara
mostrar At
02
Matrices - Ejemplo
 Ejemplo 1. Dada una matriz muestre su matriz diagonal
correspondiente.

2 4 6 2 0 0
1 2 3 0 2 0
A= A=
5 7 2 0 0 2
1 0 2
0 0 0

// F u n d a m e n t o s d e P r o g r a m a c i ó n
02
Matrices - Ejemplo
 Ejemplo 1. Matriz diagonal

Análisis:
• ¿Cuál es el objetivo buscado?
• Calcular la matriz diagonal de una matriz dada.
• ¿Cuáles son los datos de entrada?
• Una matriz de i filas por j columnas
• ¿Cuáles son los datos de salida?
• La matriz diagonal
• ¿Qué cálculos/procesos deben llevarse a cabo?
• Mij = 0 si i != j

// F u n d a m e n t o s d e P r o g r a m a c i ó n
02
Matrices - Ejemplo
 Ejemplo 1. Matriz diagonal

inicio
m = evaluar(leer())
para i=0;<=largo(m);+1
para j=0;<=largo(m[i]);+1
if i != j:
m[i][j] = 0
finpara
finpara
mostrar(m)
fin

// F u n d a m e n t o s d e P r o g r a m a c i ó n
Fundamentos de
programación

Filosofía Python: “No inventes la rueda”


Operaciones básicas con matrices - NumPy
02
Matrices - NumPy

¿Qué es NumPy?
Librería externa para Python que permite realizar cálculos sobre
grandes cantidades de datos.

Utilizado en:
• Visión artificial
• Ciencias de los datos
• Álgebra lineal

¿Por qué usarlo?


Simplifica operaciones complejas en Python
02
Matrices - Numpy

¿Qué es una matriz en NumPy?


import numpy as np Importar la librería NumPy bajo el nombre “np”

matriz = np.zeros((3, 4)) 0 0 0 0


0 0 0 0
0 0 0 0

Crear matriz de tres filas por cuatro columnas


llena de ceros.

Otras formas de crear matrices.


• np.identity(3) # Matriz identidad de dimensión tres
• np.eye(4, 3) # Matriz de 4x3 con unos en una diagonal y ceros en el resto
de elementos
02
Matrices - NumPy

¿Qué es una matriz en NumPy?


import numpy as np

2 4 6 A = np.matrix( [ [2, 4, 6],


1 2 3 [1, 2, 3],
A=
5 7 2 [5, 7, 2],
1 0 2 [1, 0, 2] ] )

A[1] [[1, 2, 3]]


A[1,2]  3
A[1][2]  ERROR
A[1,:2]  [[1, 2]]
A[2, 1:2] [[7]]
02
Matrices – Operaciones - NumPy
Restricciones:
• Suma: las matrices deben tener la misma dimensión
• Multiplicación: el número de filas de la primera matriz debe ser igual número de
columnas de la segunda matriz
import numpy as np
a = np.matrix( [ [2, 4, 6], [1, 2, 3], [5, 7, 2], [1, 0, 2] ] )
b = np.matrix( [ [1, 2, 1], [3, 4, 5], [6, 3, 2], [1, 1, 1] ] )

c=a+b Suma de matrices


print( c )

c=2*b Multiplicación por escalar


print( c )

c=a*b Error, ¿por qué?


print( c )
¿ Y los ciclos?
Operación implícita gracias a NumPy
02
Matrices – Operaciones - NumPy

a.transpose() # Devuelve la transpuesta de a


a.T # Devuelve la transpuesta de a
a.max() # Devuelve el valor máximo de a
a.sum() # Devuelve la suma de los elementos de la matriz
np.dot(a, b) # Producto punto de dos vectores a y b

Sistema de ecuaciones lineales


Sean las ecuaciones:
3X0 + X1 = 9
X0 + 2X1 = 8
Entonces:
a = np.array([[3,1], [1,2]])
b = np.array([9,8])
x = np.linalg.solve(a, b)
print(x)  [2, 3]
02
Matrices - Ejemplo
 Ejemplo 2. Matriz diagonal

Análisis:
• ¿Cuál es el objetivo buscado?
• Calcular la matriz diagonal de una matriz dada.
• ¿Cuáles son los datos de entrada?
• Una matriz de i filas por j columnas
• ¿Cuáles son los datos de salida?
• La matriz diagonal
• ¿Qué cálculos/procesos deben llevarse a cabo?
• Mij = 0 si i != j

// F u n d a m e n t o s d e P r o g r a m a c i ó n
02
Matrices - Ejemplo
 Ejemplo 1. Matriz diagonal

inicio
import numpy as np
m = np.matrix(evaluar(leer()))
diagonal_en_vector = np.diag(m)
diagonal_en_matriz = np.diag(diagonal_en_vector)
mostrar(diagonal_en_matriz)
fin

// F u n d a m e n t o s d e P r o g r a m a c i ó n
02

Documentos de ayuda

Numpy matrices:
https://docs.scipy.org/doc/numpy/referen
ce/generated/numpy.matrix.html

Numpy algebra lineal:


https://docs.scipy.org/doc/numpy/referen
ce/routines.linalg.html
Fundamentos de
programación

Tomando el control del código


try/except
03
Errores

¿Control del programa?


Las buenas prácticas de programación indican que los errores que pueden surgir en un
programa deben ser controlados, de no hacerlo el programa puede comportarse de
forma inesperada y fallar.
03
Errores

Errores de ejecución en el programa


Errores más frecuentes:

• ZeroDivisionError: Cuando se intenta dividir un numero por cero

• NameError: Cuando se llama una función o variable que no existe

• TypeError: Cuando se intenta convertir texto inválido en un número

• IOError: Error al usar métodos entrada (ej. un archivo no abre)


03
Errores

Errores de ejecución en el programa


inicio
b=0
mostrar(2 / b) ZeroDivisionError
fin

inicio
a=2
mostrar(a / b) NameError
fin

inicio
a = entero(‘hola’) TypeError
fin
04
Estructura de control – Aproximación intuitiva

Ejecute el código ¿Se


¿Se
dentro de la genera Sí puede
estructura de error?
controlar?
control No
No Sí

¿Existe bloque Ejecute la


Terminar y mostrar
de estructura que
error al usuario
finalización? maneja el error

Sí No

Ejecute la
Fin bloque de
estructura de
control
finalización
04
Estructura de control - Explicacion

El programa intentará ejecutar todo lo que se encuentre dentro del bloque try.

Si un error es generado saltará inmediatamente al primer bloque except que pueda


controlar el error generado.
• Si el error es tratado por un bloque except el programa continuará al bloque
finally si existe.
• Si el error no es tratado el programa generará un error y su ejecución se
detiene.

Si el bloque finally existe, se ejecutará el código dentro del bloque finally ocurra o no
un error.

Una vez el bloque try/except termina se ejecuta el programa normalmente.


04
Estructura de control

Estructura de control
Para poder controlar errores se usa una estructura de control

try:
…instrucciones que pueden producir un error…
except tipo_de_error_1:
… instrucciones para el tipo de error 1…

except tipo_de_error_n:
… instrucciones para el tipo de error n…
finally:
… instrucciones de finalización
04
Estructura de control

Estructura de control
Para poder controlar errores se usa una estructura de control

try: Sección que contiene todas las instrucciones


… que pueden o no generar un error.
except tipo_de_error_1:
… Sección que define qué debe hacerse según el
… tipo de error.
except tipo_de_error_n:

finally: Sección que define qué debe suceder al
… finalizar toda la estructura de control. Esta
sección es opcional.
04
Estructura de control - Ejemplo
¿Cómo tomar el control de este código?
Código calculadora básica.

numero_1 = int(input())
numero_2 = int(input())
operacion = int(input())
Posibles errores:
If operacion == 1: • División por cero
print(numero_1+numero_2) • Error de tipo
If operacion == 2:
print(numero_1-numero_2)
If operacion == 3:
print(numero_1*numero_2)
If operacion == 4:
print(numero_1/numero_2)
04
Estructura de control - Ejemplo

try:
numero_1 = 2
numero_2 = 0
print(numero_1/numero_2)
print(“Programa sin errores”)
except ZeroDivisionError:
print(“Para dividir el numero 2 no puede ser 0”)
except TypeError:
print(“Debe ingresar un numero”)
except Exception:
print(“Controlo cualquier tipo de error”)
finally:
print(“Fin calculadora”)
04
Estructura de control - Ejemplo
try: Como número_2 es igual a 0 la
numero_1 = 2 instrucción numero_1/numero_2
numero_2 = 0 generará un error de división por 0.
print(numero_1/numero_2)
print(“Programa sin errores”) Todo el bloque try se detendrá
except ZeroDivisionError: inmediatamente y ejecutará el primer
print(“Para dividir el numero 2 no puede ser 0”) bloque except que encuentre capaz de
except TypeError: manejarlo.
print(“Debe ingresar un numero”)
except Exception: El bloque finally se ejecutará, este
print(“Controlo cualquier tipo de error”) bloque es opcional.
finally:
print(“Fin calculadora”) Resultado:
Para dividir el número 2 no puede ser 0
Fin calculadora
04
Estructura de control - Ejemplo

try:
numero_1 = ‘a’
numero_2 = 0
print(numero_1 + numero_2)
print(“Programa sin errores”)
except ZeroDivisionError:
print(“Para dividir el numero 2 no puede ser 0”)
except TypeError:
print(“Debe ingresar un numero”)
except Exception:
print(“Controlo cualquier tipo de error”)
print(“Fuera del bloque de control”)
04
Estructura de control - Ejemplo
try: No puede sumarse un número con
numero_1 = ‘a’ texto, por lo tanto se genera un error
numero_2 = 0 de tipo.
print(numero_1 + numero_2)
print(“Programa sin errores”) El bloque “except TypeError” capturará
except ZeroDivisionError: el error y se ejecutará.
print(“Para dividir el numero 2 no puede ser 0”)
except TypeError:
print(“Debe ingresar un numero”) Resultado:
except Exception: Debe ingresar un número
print(“Controlo cualquier tipo de error”) Fuera del bloque de control
print(“Fuera del bloque de control”)
Preguntas
Aportes
Comentarios
// F u n d a m e n t o s d e P r o g r a m a c i ó n

También podría gustarte