0% encontró este documento útil (0 votos)
19 vistas86 páginas

Introduccion A Python - Agosto 2024

El documento es una introducción a Python en el contexto de la Ingeniería Biomédica, cubriendo conceptos básicos como operadores, manejo de cadenas, variables, tuplas, listas y diccionarios. Se explican las operaciones de entrada y salida estándar, así como métodos específicos para manipular estructuras de datos en Python. Este material está diseñado para ser utilizado en un laboratorio de procesamiento digital de bioseñales en la Universidad Autónoma de Ciudad Juárez entre agosto y diciembre de 2024.

Cargado por

Rugle
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
19 vistas86 páginas

Introduccion A Python - Agosto 2024

El documento es una introducción a Python en el contexto de la Ingeniería Biomédica, cubriendo conceptos básicos como operadores, manejo de cadenas, variables, tuplas, listas y diccionarios. Se explican las operaciones de entrada y salida estándar, así como métodos específicos para manipular estructuras de datos en Python. Este material está diseñado para ser utilizado en un laboratorio de procesamiento digital de bioseñales en la Universidad Autónoma de Ciudad Juárez entre agosto y diciembre de 2024.

Cargado por

Rugle
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PPTX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 86

Laboratorio de Procesamiento Digital

de Bioseñales

Introducción a Python

Ingeniería Biomédica
Universidad Autónoma de Ciudad Juárez
Agosto – diciembre 2024
Introducción
¿Que es Python?

PDBS- Dr. José David Díaz Román


Uso de Python como calculador
Operadores:
– Suma, resta, multiplicación y división: (+ , - , * , / )
• Los números: 2, 5, 100, son números tipo entero
• Los número: 2.0, 5.0, 100.0, son tipo flotante
– La división siempre retorna un número flotante, aunque su resultado sea un
entero.
– La operaciones entre operandos de distinto tipo (enteros y flotantes) generan un
resultado de un número tipo flotante.
– El operador “//” retorna la parte entera de la división entre 2 números,
descartando los decimales (sin redondear).
– El operador “%” retorna el residuo de una división.
– El operador “**” se emplea para calcular la potencia de un número.

PDBS- Dr. José David Díaz Román


Uso de Python como calculador
– En operaciones en la cónsola de Python, el resultado de la última operación
realizada es asignado a la variable con el símbolo “_”.

– La función “round(X)” redondea X a su parte entera (redondeo hacia arriba).


• round(X, n) regresa el volor redondeado X con n decimales

– Los número complejos se expresan como: a + bj, donde “a” es la parte real y “b”
es la parte imaginaria

Dr. José David Díaz R.


Manejo de cadena de caracteres
– Las cadenas de caracteres se definen dentro de los símbolos comillas dobles
(“......”) o simples (‘.....’), sin combinarlos.
– \’ introduce una comilla simple en una cadena
– \” introduce una comilla doble en una cadena
– print(s) imprime en pantalla el mensaje o valor de la variable “s”, ejemplo:
In [1]: s= 'Mi nombre es José'
Líneas de
In [2]: s
entrada o salida
de la consola Out[2]: 'Mi nombre es José'
In [3]: print(s)
Mi nombre es José

– El operador “\n” introduce un salto de línea dentro de un mensaje que se imprime


en pantalla:
In [4]: s='Primera linea \nSegunda linea'
In [5]: s
Out[5]: 'Primera linea \nSegunda linea'
In [6]: print(s)
Primera linea
Segunda linea
Dr. José David Díaz R.
Manejo de cadena de caracteres
– Podemos concatenar dos o mas cadenas guardadas en dos o mas variables
uniéndolas con el símbolo de “+”:
In [15]: a='Jose '
In [16]: b='David '
In [17]: c= 'Diaz '
In [18]: d= 'Roman'
In [19]: a+b+c+d
Out[19]: 'Jose David Diaz Roman'
In [20]: print(a+b+c+d)
Jose David Diaz Roman
In [21]: f= a+b+c+d
In [22]: print(f)
Jose David Diaz Roman

Dr. José David Díaz R.


Manejo de cadena de caracteres
– Los caracteres dentro de una cadena están indexados, comenzando con el de
índice 0 (cero):
In [23]: f[0]
Out[23]: 'J'
In [24]: f[1]
Out[24]: ‘o’

– Los índices pueden ser negativos, en cuyo caso nos retornan desde el último caracter de la
cadena, como en el ejemplo:
In [25]: f[-1]
Out[25]: 'n'
In [26]: f[-2]
Out[26]: 'a’

– Uso del operador “:” en la indexación. Ejemplo: X[i : j], nos muestra los caracteres de la
cadena X, comenzando con el de índice i, hasta el índice j-1.
In [28]: mensaje='Python'
In [29]: mensaje[0:4]
Out[29]: 'Pyth'
Dr. José David Díaz R.
Manejo de cadena de caracteres
In [37]: mensaje[:3] #retorna los caracteres desde el inicio hasta el de índice 3-1
Out[37]: 'Pyt'
In [38]: mensaje[3:] #retorna los caracteres desde el de índice 3 hasta el último
Out[38]: 'hon’

– La función “len(X)” retorna la longitud de la cadena X:


In [36]: len(mensaje)
Out[36]: 6

Dr. José David Díaz R.


Variables y constantes
• Variables:
– Una variable es un espacio para almacenar datos modificables en la memoria de
un ordenador. En Python, una variable se define con la sintaxis:
nombre_de_la_variable = valor_de_la_variable
– Cada variable, tiene un nombre y un valor, el cual define a la vez, el tipo de datos
de la variable.
– Utilizar nombres descriptivos y en minúsculas. Para nombres compuestos, separar
las palabras por guiones bajos.
– Existe un tipo de variable, denominada constante, la cual se utiliza para definir
valores fijos, que no requieran ser modificados.
• Constantes
– Utilizar nombres descriptivos y en mayúsculas separando palabras por guiones
bajos. Ejemplo:
– MI_CONSTANTE = 12

Dr. José David Díaz R.


Tuplas
• Una tupla es una variable que permite almacenar varios datos
inmutables (no pueden ser modificados una vez creados), y pueden ser
de tipos diferentes. Se crean asignando sus valores dentro de
paréntesis, separados por comas. Ejemplo:
In [115]: mi_tupla = ('cadena de texto', 15, 2.8, 'otro dato', 25)
In [116]: mi_tupla
Out[116]: ('cadena de texto', 15, 2.8, 'otro dato', 25)

– Se puede acceder a cada uno de los datos mediante su índice correspondiente.


In [117]: mi_tupla[0]
Out[117]: 'cadena de texto'
In [118]: mi_tupla[0][5]
Out[118]: 'a'

Dr. José David Díaz R.


Listas (objeto list)
– Una lista es similar a una tupla con la diferencia fundamental de que permite
modificar los datos una vez creados.

– Se puede escribir como una lista de valores (elementos) separados por comas entre
corchetes.

– Las listas pueden contener elementos de diferentes tipos, pero generalmente todos
los elementos tienen el mismo tipo.
>>> numeros = [ ] # crea una lista vacia
>>> numeros = [1, 4, 9.1, 16, 25.07]#lista de números
>>> letras = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] #lista de letas

Dr. José David Díaz R.


Listas
• Listas anidadas
In [3]: y= [letras, numeros] #lista anidada. Lista de listas
In [4]: y
Out[4]: [['a', 'b', 'c', 'd', 'e', 'f', 'g'], [1, 4, 9.1, 16, 25.07]]
• Acceso a los elementos de la lista mediante indexación:
In [6]: letras[0]
Out[6]: 'a'
In [7]: numeros[3]
Out[7]: 16
In [8]: y[0]
Out[8]: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
In [9]: y[1]
Out[9]: [1, 4, 9.1, 16, 25.07]
In [8]: y[0][0]
Out[8]: 'a'
In [9]: y[1][3]
Out[9]: 16

HdPyS - Dr. José David Díaz R.


Listas
• Listas de cadenas:
In [18]: nombres=['Jose', 'Pedro']
In [19]: nombres
Out[19]: ['Jose', 'Pedro']
In [20]: nombres[0]
Out[20]: 'Jose'
In [21]: nombres[0][0]
Out[21]: 'J'
• Agregar elementos a una lista, al final. Uso del método append(“nuevo
elemento”)
In [16]: letras.append(100) #agrega un número a la lista de letras
In [17]: letras
Out[17]: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 100]

Dr. José David Díaz R.


Listas
• Agregar varios elementos al final de la lista. Uso del método extend(otra lista)
In [73]: nombres.extend(['Maria', 'Perla'])
In [74]: nombres
Out[74]: ['Jose', 'Pedro', 'Maria', 'Perla’]

• Agregar un elemento en una posición determinada.


Método insert(posición, “nuevo elemento”)
In [75]: nombres.insert(0,'Carlos')
In [76]: nombres
Out[76]: ['Carlos', 'Jose', 'Pedro', 'Maria', 'Perla']

Dr. José David Díaz R.


Listas
• Métodos de eliminación:
– Eliminar el último elmento de la lista. Método “pop()”.
In [59]: letras.pop()
Out[59]: 100
In [60]: letras
Out[60]: ['a', 'b', 'c', 'd', 'e', 'f', 'g’]
– Eliminar un elemento según su índice. Método “pop(índice)”.
In [61]: letras.pop(2)
Out[61]: 'c'
In [62]: letras
Out[62]: ['a', 'b', 'd', 'e', 'f', 'g']

Dr. José David Díaz R.


Diccionarios
• Mientras que a las listas y tuplas se accede solo y únicamente
por un número de índice, los diccionarios permiten utilizar una
clave para declarar y acceder a un valor.
• Creando un diccionario vacío:
In [1]: mi_diccionario = {}
In [2]: mi_diccionario
Out[2]: {}
• Creando un diccionario:
In [3]: mi_diccionario = {'Nombre': 'Jose David', 'Edad': 43, 'Talla': 182.5}
In [4]: mi_diccionario
Out[4]: {‘Nombre': 'Jose David', 'Edad': 43, 'Talla': 182.5}
In [6]: mi_diccionario['Nombre']
Out[6]: 'Jose David'
In [7]: mi_diccionario['Talla']
Out[7]: 182.5

Dr. José David Díaz R.


Diccionarios
• Un diccionario permite eliminar cualquier entrada empleando
su clave:
In [8]: del(mi_diccionario['Edad'])
In [9]: mi_diccionario
Out[9]: {'Nombre': 'Jose David', 'Talla': 182.5}

• Al igual que las listas, el diccionario permite modificar los


valores:
In [10]: mi_diccionario['Talla']=183
In [11]: mi_diccionario
Out[11]: {'Nombre': 'Jose David', 'Talla': 183}

Dr. José David Díaz R.


Métodos de los objetos Diccionario
• Incluir una nueva clave y dato a un diccionario. Incluir la clave “Sexo” a mi_diccionario

• Obtener las claves de un diccionario:


– Método: keys()
In [18]: mi_diccionario.keys()
Out[18]: dict_keys(['Nombre', 'Apellido', 'Nota', 'Edad', 'Sexo'])

• len(): Devuelve número de elementos del diccionario.


In [20]: len(mi_diccionario)
Out[20]: 5

Dr. José David Díaz R.


Operaciones de entrada
• Entrada estándar
– La forma más sencilla de obtener información por parte del usuario
es mediante la función input().
– Esta función toma como parámetros un string, que será el texto a
mostrar al usuario pidiendo la entrada y, luego, devolverá una cadena
con los caracteres introducidos por el usuario.
– Espera a que se pulse la tecla Enter.
In [28]: nombre = input("Ingrese su nombre: ")
Ingrese su nombre: Jose David
In [29]: print("Ud. ingresó el nombre: {}".format(nombre))
Ud. ingresó el nombre: Jose David

Dr. José David Díaz R.


Operaciones de entrada
In [30]: edad = input('Edad: ')
Edad: 43

In [31]: dias_vividos = edad*365

In [32]: dias_vividos
Out[32]:
'4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
4343434343434343434343434343434343434343434343434343434343434343434343
434343434343434343434343434343'

Dr. José David Díaz R.


Operaciones de entrada
In [35]: edad=int(edad)
In [36]: dias_vividos = edad*365

In [37]: dias_vividos
Out[37]: 15695

In [40]: altura = input('Altura en mts: ')


Altura en mts: 1.83
In [41]: altura
Out[41]: '1.83’

In [42]: altura = float(input('Altura en mts: '))


Altura en mts: 1.83
In [43]: altura
Out[43]: 1.83

Dr. José David Díaz R.


Salida estandar
• La salida estandar es la consola (pantalla del computador).

• La forma más sencilla de mostrar algo en la salida estándar es mediante


el uso de la función print().
In [45]: Hola soy Jose
File "<ipython-input-45-56ea161c14ee>", line 1
Hola soy Jose
^
SyntaxError: invalid syntax

In [46]: print('Hola, soy José')


Hola, soy José
• Después de imprimir la cadena pasada como parámetro, el puntero se
sitúa en la siguiente línea de la pantalla.

Dr. José David Díaz R.


Salida estandar
• Si se quiere forzar que se salte a una nueva línea se utilizará el carácter
especial \n
• También se puede utilizar otros caracteres especiales como \t, este
introducirá un tabulado en el texto.
In [48]: print('\tHola, \tsoy \tJosé')
Hola, soy José

• Si se desea que la siguiente impresión se realice en la misma línea


hay que configurar el parámetro de la función print() del siguiente
modo: end=".
In [54]: for i in range(5):
...: print(i, end='')
...:
01234

HdPyS - Dr. José David Díaz R.


Salida estandar
• Si queremos concatenar texto podemos utilizar una coma (,) o un signo
más (+).
• La diferencia está en que con la coma se añade automáticamente un
espacio entre los textos concatenados, con el signo más esto no ocurre:
In [56]: print('Hola,','soy','José')
Hola, soy José
In [57]: print('Hola,'+'soy'+'José')
Hola,soyJosé
In [58]: print('Tengo',46,'años')
Tengo 46 años
In [59]: print('Tengo '+46+' años')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-59-e58a5ee56223> in <module>
----> 1 print('Tengo ‘+46+' años')
TypeError: can only concatenate str (not "int") to str
HdPyS - Dr. José David Díaz R.
Salida estandar

• Al utilizar el operador + tenemos que convertir antes cada argumento en una


cadena (si no lo es ya).
In [60]: print('Tengo '+str(46)+' años')
Tengo 46 años

• Utilizando la función format() podemos darle formato al texto mostrado por


pantalla de un modo más personalizado.
In [71]: print('Nombre: {}, edad: {}'.format(nombre, edad))
Nombre: José, edad: 46
– Podemos indicar la posición de la variable en el mensaje:
In [72]: print('Nombre: {0}, edad: {1}'.format(nombre, edad))
Nombre: José, edad: 46

HdPyS - Dr. José David Díaz R.


Imprimir en pantalla mensajes con formato
In [40]: nombres = 'Jose David'
In [41]: apellidos = 'Diaz Roman'
In [42]: edad = 46
In [43]: print("Mi nombre es: ", nombres, " y mis apellidos: ", apellidos, "\nEdad: ", edad, "
años")
Mi nombre es: Jose David y mis apellidos: Diaz Roman
Edad: 46 años
– Otra forma:
In [44]: print("Mi nombre es: {}, y mis apellidos: {}\nEdad: {} años".format(nombres, apellidos,
edad))
Mi nombre es: Jose David, y mis apellidos: Diaz Roman
Edad: 46 años

Dr. José David Díaz R.


Librerías numéricas
• Librería o módulo “math”:
– Provee acceso a funciones matemáticas.
– Sus funciones no puedes usarse con números complejos. Para el
caso de trabajar con números complejos, se utiliza el módulo
“cmath”.
– Todas las funciones de esta librería retornan números flotantes, salvo
casos específicos.

• Algunas funciones del módulo:


– math.ceil(x): retorna el entero inmediato superior del valor x (si x es
flotante). Retorna x, si x es entero.
– math.copysign(x, y): retorna un flotante cuyo valor es el valor
absoluto de x, con el signo de y.

Dr. José David Díaz R.


Librerías numéricas
– math.ceil(x): retorna el entero inmediato superior del valor x (si x es
flotante). Retorna x, si x es entero.

– math.floor(x): retorna el entero inmediato inferior del valor de x (si x


es flotante). Retorna x, si x es entero.

– math.copysign(x, y): retorna un flotante cuyo valor es el valor


absolute de x, con el signo de y.

– math.fabs(x): retorna el valor absolute de x.

– math.factorial(x): Factorial de x.

Dr. José David Díaz R.


Librerías numéricas
Función Retorno Función Retorno
math.isfinite(x) math.cos(x)
math.isinf(x) math.acos(x)
math.isnan(x) math.sin(x)
math.ldexp(x, i) Inverso de math.frexp(x). math.asin(x)
Retorna x * 2**i
math.modf(x) Retorna la parte fraccional y math.tan(x)
entera de x
math.exp(x) e^x, donde e = 2.718281... math.atan(x)
math.log(x[, base]) Logaritmo natural de x ó math.degrees(x) Convierte un ángulo de
logaritmo con base radianes a grados
especificada en “base”
math.log2(x) Logaritmo base 2 de x math.radians(x) Grados a radianes
math.log10(x) Logaritmo base 10 de x Funciones Hiperbólicas
math.sqrt(x) Raiz cuadrada de x
math.pow(x,y) x^y

Dr. José David Díaz R.


Librerías numéricas
• Funciones matemáticas con números complejos:
– Librería “cmath”.
– En Python, un número complejo “z” se almacena usando sus
coordenadas cartesianas, las cuales se establecen por su parte real
z.real y su parte imaginaria z.imag.
• z = z.real + z.imag*1j
– Podemos crear un número complejo de la forma:
• z = 2+3j ó
• x = complex(2, 3) -- complex(x.real, x.imag)

Dr. José David Díaz R.


Librerías numéricas
• Coversión de forma cartesiana a polar y viceversa
– cmath.phase(x): Retorna la fase de x entre el rango [-pi, pi].

– cmath.polar(x): Retorna una tupla con el par (r, phi), donde r es el


módulo de x, y phi su fase. Equivalente a: (abs(x), cmath.phase(x)).

– cmath.rect(r, phi): Retorna un número complejo x con coordenadas


polares (r, phi). Es equivalente a: r*(math.cos(phi) + math.sin(phi)*1j)

• El modulo “cmath” también admite la aplicación de funciones tales


como: logarítmicas y de potencia, trigonométricas, hiperbólicas y de
identificación, entre otras.

Dr. José David Díaz R.


Librería NumPy
• NumPy (numerical Python) es un paquete de cómputo científico para
trabajar en Python.

• NumPy prevee el marco para trabajar con objetos de tipo arreglos


multidimensionales.

• Permite una gran variedad operaciones con matrices, tales como:


operaciones matemáticas, lógicas, manipulación de formas,
clasificación, selección, E / S, transformadas discretas de Fourier,
álgebra lineal básica, operaciones estadísticas básicas, simulación
aleatoria, entre otras.

Dr. José David Díaz R.


NumPy
• El núcleo de trabajo de NumPy es el objeto “ndarray”.

• Este objeto encapsula arreglos n-dimensionales de datos homogéneos.

• Algunas características de este tipo de objetos:


– Los arreglos NumPy tienen un tamaño fijo en el momento de la creación, aunque
pueden crecer dinámicamente.
– Se requiere que todos los elementos de un arreglo NumPy sean del mismo tipo de
datos y, por lo tanto, tendrán el mismo tamaño en la memoria.
– Las operaciones se realizan de forma mucho mas eficiente con este tipo de datos.
– Existe una inmensa cantidad (creciente) de paquetes científicos y matemáticos
basados en Python que utilizan arreglos NumPy;

Dr. José David Díaz R.


NumPy
• Ejemplos de arreglos:

Matriz (2D): Hipermatriz (3D):


• Filas – axis 0 • Profundidad – axis 0
• Columnas – axis 1 • Filas – axis 1
• Columnas – axis 2
Dr. José David Díaz R.
NumPy
• Creación de arreglos:
– Ejemplos:
– Primero importar la librería:
In [26]: import numpy as np
In [27]: x = np.array([2,3,1,0]) #se crea un arreglo unidimensional con 4 datos
In [28]: x
Out[28]: array([2, 3, 1, 0])

In [25]: x = np.array([[1, 2.0],[0, 0],(1+1j, 3.)]) #crea un arreglo 2D de 3 filas y 2 columnas


In [26]: x
Out[26]:
array([[1.+0.j, 2.+0.j],
[0.+0.j, 0.+0.j],
[1.+1.j, 3.+0.j]])

Dr. José David Díaz R.


NumPy
• Creación de arreglos:
In [30]: np.zeros((2, 3))
Out[30]:
array([[0., 0., 0.],
[0., 0., 0.]])
In [31]: np.ones((2,3))
Out[31]:
array([[1., 1., 1.],
[1., 1., 1.]])
In [32]: np.arange(10) #permite crear seguencia de datos
Out[32]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [33]: np.arange(2, 10, dtype=float)
Out[33]: array([2., 3., 4., 5., 6., 7., 8., 9.])
In [34]: np.arange(2, 3, 0.1)
Out[34]: array([2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])

Dr. José David Díaz R.


NumPy
• Creación de arreglos:
In [35]: np.linspace(1., 4., 6)
Out[35]: array([1. , 1.6, 2.2, 2.8, 3.4, 4. ])

• Para conocer la forma (tamaño) que tiene un arreglo, consultamos su


atributo .shape

In [43]: x = np.array([2,3,1,0])
In [44]: x.shape
Out[44]: (4,)
In [45]: y=np.ones((3,4))
In [46]: y.shape
Out[46]: (3, 4)

Dr. José David Díaz R.


NumPy
• Redimensionar un arreglo. Método .reshape(dim)
In [52]: x1 = x.reshape(4,1)
In [53]: x1
Out[53]:
array([[2],
[3],
[1],
[0]])
In [54]: x1.shape
Out[54]: (4, 1)

Dr. José David Díaz R.


NumPy
• Accediendo a los elementos de un arreglo por medio de sus índices:
In [73]: x
Out[73]: array([2, 3, 1, 0])
In [68]: x[0]
Out[68]: 2
In [74]: x1
Out[74]:
array([[2],
[3],
[1],
[0]])
In [69]: x1[0]
Out[69]: array([2])
In [70]: x1[0,0]
Out[70]: 2

Dr. José David Díaz R.


NumPy
In [75]: x = np.arange(10)
In [76]: x
Out[76]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [77]: x[2:7]
Out[77]: array([2, 3, 4, 5, 6])
In [78]: x[-1]
Out[78]: 9
In [79]: x[:3]
Out[79]: array([0, 1, 2])
In [80]: x[::3]
Out[80]: array([0, 3, 6, 9])

Dr. José David Díaz R.


NumPy
In [81]: y=np.arange(49)
In [82]: y=y.reshape(7,7)
In [83]: y
Out[83]:
array([[ 0, 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19, 20],
[21, 22, 23, 24, 25, 26, 27],
[28, 29, 30, 31, 32, 33, 34],
[35, 36, 37, 38, 39, 40, 41],
[42, 43, 44, 45, 46, 47, 48]])
In [84]: ind=y>=25
In [85]: z=y[ind]
In [86]: z
Out[86]:
array([25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48])
Dr. José David Díaz R.
NumPy
• Las operaciones entre arreglos se realizan de forma vectorizada, lo que
evita requerir ciclos iterativos que serían necesarios con usos de listas.
– Ejemplo con lista:
In [87]: a=np.array([1,2,3])
In [88]: b=np.array([2,2,2])
In [89]: a*b
In [90]: a*2

• “Broadcasting” es el término utilizado para describir el comportamiento


implícito de las operaciones elemento por elemento entre objetos
ndarray.
In [91]: a=np.array(a)
In [92]: b=np.array(b)
In [93]: a*b
Out[93]: array([2, 4, 6])

HdPyS - Dr. José David Díaz R.


NumPy
• Broadcasting:
In [94]: a*2
Out[94]: array([2, 4, 6])

• Reglas generales:
– Cuando se opera en dos arreglos, NumPy primero compara sus
formas. Dos dimensiones son compatibles cuando:
• Las dimensiones son iguales,
• Algunas de las dimesiones es igual a 1.

HdPyS - Dr. José David Díaz R.


NumPy
In [95]: x = np.arange(4)
In [96]: xx = x.reshape(4,1)
In [97]: y = np.ones(5)
In [98]: z = np.ones((3,4))

In [101]: xx+y
Out[101]:
array([[1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4.]])
HdPyS - Dr. José David Díaz R.
NumPy

In [102]: x+z
Out[102]:
array([[1., 2., 3., 4.],
[1., 2., 3., 4.],
[1., 2., 3., 4.]])

HdPyS - Dr. José David Díaz R.


Numpy
• Probar aplicando la transpuesta z (empleando z.T) y sumar con xx.
In [107]: z=z.T
In [108]: z.shape
Out[108]: (4, 3)
In [109]: xx+z
Out[109]:
array([[1., 1., 1.],
[2., 2., 2.],
[3., 3., 3.],
[4., 4., 4.]])

HdPyS - Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados
ndim(a) or a.ndim get the number of dimensions of an array

size(a) or a.size get the number of elements of an array

shape(a) or a.shape get the “size” of the matrix

a.shape[n-1] get the number of elements of the n-th dimension of array a.

array([[1.,2.,3.], [4.,5.,6.]]) 2x3 matrix literal

block([[a,b], [c,d]]) construct a matrix from blocks a, b, c, and d

a[-1] access last element in the 1xn matrix a

a[1,4] access element in second row, fifth column

a[1] or a[1,:] entire second row of a

a[0:5] or a[:5] or a[0:5,:] the first five rows of a

a[-5:] the last five rows of a


rows one to three and columns five to nine of a. This gives read-only
a[0:3][:,4:9]
access.

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados
a[ 2:21:2,:] every other row of a, starting with the third and going to the twenty-first

a[ ::2,:] every other row of a, starting with the first

a[ ::-1,:] a with rows in reverse order

a[r_[:len(a),0]] a with copy of the first row appended to the end

a.transpose() or a.T transpose of a

a.conj().transpose() or a.conj().T conjugate transpose of a

a@b matrix multiply

a*b element-wise multiply

a/b element-wise divide

a**3 element-wise exponentiation

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados
matrix whose i,jth element is (a_ij > 0.5). The NumPy result
(a>0.5)
is an array of the boolean values False and True.

nonzero(a>0.5) find the indices where (a > 0.5)


a[:,nonzero(v>0.5)[0]] extract the columms of a where vector v > 0.5
a[:,v.T>0.5] extract the columms of a where column vector v > 0.5
a[a<0.5]=0 a with elements less than 0.5 zeroed out
a * (a>0.5) a with elements less than 0.5 zeroed out
a[:] = 3 set all values to the same scalar value
y = x.copy() numpy assigns by reference
y = x[1,:].copy() numpy slices are by reference
turn array into vector (note that this forces a copy). To
y = x.flatten() obtain the same data ordering as in Matlab,
use x.flatten('F').
arange(1.,11.) or r_[1.:11.] or r_[1:10:10j] create an increasing vector (see note RANGES)
arange(10.) or r_[:10.] or r_[:9:10j] create an increasing vector (see note RANGES)
arange(1.,11.)[:, newaxis] create a column vector

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados

zeros((3,4)) 3x4 two-dimensional array full of 64-bit floating point zeros

zeros((3,4,5)) 3x4x5 three-dimensional array full of 64-bit floating point zeros

ones((3,4)) 3x4 two-dimensional array full of 64-bit floating point ones


eye(3) 3x3 identity matrix
diag(a) vector of diagonal elements of a
square diagonal matrix whose nonzero values are the elements
diag(a,0)
of a

random.rand(3,4) random 3x4 matrix

linspace(1,3,4) 4 equally spaced samples between 1 and 3, inclusive

mgrid[0:9.,0:6.] two 2D arrays: one of x values, the other of y values

ogrid[0:9.,0:6.] the best way to eval functions on a grid

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados
tile(a, (m, n)) create m by n copies of a

concatenate((a,b),0) or hstack((a,b)) or c_[a,b] concatenate columns of a and b

concatenate((a,b)) or vstack((a,b)) or r_[a,b] concatenate rows of a and b


a.max() maximum element of a
a.max(0) maximum element of each column of matrix a
a.max(1) maximum element of each row of matrix a
compares a and b element-wise, and returns the
maximum(a, b)
maximum value from each pair
sqrt(v @ v) or np.linalg.norm(v) L2 norm of vector v

logical_and(a,b) element-by-element AND operator

logical_or(a,b) element-by-element OR

a&b bitwise AND operator (Python native and NumPy ufunc)


a|b bitwise OR operator (Python native and NumPy ufunc)

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados

linalg.inv(a) inverse of square matrix a

linalg.pinv(a) pseudo-inverse of matrix a

linalg.matrix_rank(a) matrix rank of a 2D array / matrix a


linalg.solve(a,b) if a is
solution of a x = b for x
square; linalg.lstsq(a,b) otherwise
Solve a.T x.T = b.T instead solution of x a = b for x

U, S, Vh = linalg.svd(a), V = Vh.T singular value decomposition of a

D,V = linalg.eig(a) eigenvalues and eigenvectors of a

Dr. José David Díaz R.


Ejemplos de resolver un Sistema de ecuaciones
lineales

Dr. José David Díaz R.


Funciones o métodos de álgebra lineal
frecuentemente usados

fft.fft(a) Fourier transform of a

fft.ifft(a) inverse Fourier transform of a

sort(a) or a.sort() sort the matrix

I = argsort(a[:,i]), b=a[I,:] sort the rows of the matrix

linalg.lstsq(X,y) multilinear regression

scipy.signal.resample(x, len(x)/q) downsample with low-pass filtering

unique(a)

Dr. José David Díaz R.


Librería de visaulización y gráficos - Matploblib
• Matplotlib es una librería para crear visulizaciones gráficas
que pueden ser estáticas, animadas o interactivas.

• Muestras de gráficas con Matplotlib:

• Gráfica simple de una linea

import matplotlib.pyplot as plt


import numpy as np

t = np.arange(0.0, 2.0, 0.01)


s = np.sin(2 * np.pi * t)
plt.plot(t, s)
plt.show()

Dr. José David Díaz R.


Matplotlib
• Gráficas de una línea incluyendo etiquetas de texto.

import matplotlib.pyplot as plt


import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2 * np.pi * t)

plt.figure('Figura 1')
plt.plot(t,s)
plt.title('Grafica de una señal')
plt.xlabel(‘tiempo (s)')
plt.ylabel(‘voltaje (mV)’)
plt.grid()
plt.show()

HdPyS - Dr. José David Díaz R.


Matplotlib
• Gráficas de una línea creando los objetos “fig” y “ax”.

import matplotlib.pyplot as plt


import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = np.sin(2 * np.pi * t)

fig, ax = plt.subplots(num='Figura 1',clear=True)

ax.plot(t,s)
ax.set(xlabel='tiempo (s)', ylabel='voltaje (mV)',
title='Grafica de una señal')
ax.grid()
plt.show()

Dr. José David Díaz R.


Matplotlib
• Gráfica de 2 líneas en un mismo eje de coordenadas. Incluyendo
leyenda.

t = np.arange(0.0, 2.0, 0.01)


s = np.sin(2 * np.pi * t)
c = np.cos(2 * np.pi * t)

fig, ax = plt.subplots(num='Figura 2',clear=True)


ax.plot(t,s, label="senal seno")
ax.plot(t,c, label="senal coseno")
ax.set(xlabel='tiempo (s)', ylabel='voltaje (mV)',
title='Grafica de una señal’)

ax.grid()
ax.legend()
plt.show()

Dr. José David Díaz R.


Matplotlib
• Figura con múltiples sub-plots:

x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

fig, (ax1, ax2) = plt.subplots(2, 1, num="Figura 1", clear=True)


fig.suptitle(‘Gráfica con 2 subplots’)

ax1.plot(x1, y1, 'o-', color='green')


ax1.set_ylabel('Oscilador amortiguado')
ax1.set_title('Senal 1')
ax1.grid()
ax2.plot(x2, y2, '.-', color='red')
ax2.set_xlabel('tiempo (s)')
ax2.set_ylabel('Oscilador')
ax2.set_title('Senal 2’)
# ax2.grid()
plt.show()

Dr. José David Díaz R.


Matplotlib
• Múltiples sub-plots:

fig, axs = plt.subplots(2, 2, num='Figura subplots')


axs[0, 0].plot(x1, y1)
axs[1, 1].scatter(x2, y2)

axs[0, 0].set_title('Senal 1')


axs[0, 0].grid()

Dr. José David Díaz R.


Matplotlib
• Graficar una imagen:

img = plt.imread('Eyeback.bmp')
fig, ax = plt.subplots(num='Imagen')
ax.imshow(img)
ax.axis('off')
plt.title('Imagen')
plt.show()

img = plt.imread('Eyeback.bmp')
fig, ax = plt.subplots(num='Imagen')
ax.imshow(img,cmap='gray')
ax.axis('off')
plt.title('Imagen')
plt.show()

HdPyS - Dr. José David Díaz R.


Matplotlib
• Histograma:

mu = 100 # media de la distribucion


sigma = 15 # desviacion estandar de la distribucion
x = mu + sigma * np.random.randn(500)

num_bins = 50
fig, ax = plt.subplots(num="Histograma")

# histograma de los datos


n, bins, patches = ax.hist(x, num_bins, density=True)
ax.set_xlabel('rango de valores')
ax.set_ylabel('Densidad de probabilidad')
ax.set_title('Histograma con media $\mu$=100, $\sigma$=15')
plt.show()

HdPyS - Dr. José David Díaz R.


Matplotlib
• Graficos en 3D:

from matplotlib import cm

fig, ax = plt.subplots(subplot_kw={"projection": "3d"},


num='Grafica 3D')

# data.
X = np.arange(-10, 10, 0.25)
Y = np.arange(-10, 10, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)+0.0000001
Z = np.sin(R)/R
# Plot the surface.
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
plt.show()

HdPyS - Dr. José David Díaz R.


Matplotlib

Gráfica de contornos:

from matplotlib import cm

fig, ax = plt.subplots(num='Contornos')
# data.
X = np.arange(-10, 10, 0.25)
Y = np.arange(-10, 10, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)+0.0000001
Z = np.sin(R)/R
# Plot the contour.
cont = ax.contour(X, Y, Z, cmap=cm.hot)
fig.colorbar(cont, shrink=0.5, aspect=5)

plt.show()

HdPyS - Dr. José David Díaz R.


Matplotlib
• Gráfica de boxplots:

x1 = np.random.normal(0, 1, 500)
x2 = np.random.normal(1, 1, 500)

fig, ax = plt.subplots(num='Boxplots')

ax.boxplot([x1, x2], notch=True,


labels=['datos 1', 'datos 2'])

HdPyS - Dr. José David Díaz R.


Matplotlib
• Gráfico de pastel:

labels = ['Caso 1', 'Caso 2', 'Caso 3', 'Caso 4']


sizes = [15, 30, 45, 10]
fig, ax = plt.subplots(num='Pastel')
ax.pie(sizes,labels=labels, autopct='%.2f',
shadow=True)
plt.show()

HdPyS - Dr. José David Díaz R.


Estructuras selectivas
• Las estructuras selectivas o condicionales permiten la ejecución de un
código en caso de cumplirse una condición.
• Python admite las condiciones lógicas habituales de las matemáticas:
– Igual: a == b
– Diferente: a != b
– Menor que: a < b
– Menor o igual que: a <= b
– Mayor que: a > b
– Mayor o igual que: a >= b

• Estas condiciones se pueden utilizar de varias formas, más


comúnmente en "sentencias if" y bucles.

HdPyS - Dr. José David Díaz R.


Sentencia “if”
• Ejemplo:

a = 33
b = 200
if b > a:
print("b es mayor que a")

• Indentación o sangría:
– Python se basa en la sangría para definir el alcance en el código.
– Otros lenguajes de programación suelen utilizar llaves o corchetes para este
propósito.

HdPyS - Dr. José David Díaz R.


Sentencias if - elif
• La palabra sentencia elif es la forma que tiene Python de decir "si las
condiciones anteriores no eran verdaderas, pruebe esta condición".
a = 33
b = 33
if b > a:
print("b es mayor que a")
elif a == b:
print("a y b son iguales")

• La sentencia elif se puede utilizar las veces que sean necesarias, de la


forma: if – elif – elif ...
• Esta combinación de sentencias sustituye las operaciones de switch –
case de otros lenguajes de programación.

HdPyS - Dr. José David Díaz R.


Sentencias if – elif – else
• La palabra o sentencia else captura cualquier cosa que no sea
detectada por las condiciones anteriores.

a = 200
b = 33
if b > a:
print("b es mayor que a")
elif a == b:
print("a y b son iguales")
else:
print("a es mayor que b")

• Se puede utilizar la sentencia else sin que exista previamente elif.

HdPyS - Dr. José David Díaz R.


Manejo corto del if
• Si solo se tiene una instrucción para ejecutar, se puede poner en la
misma línea que la instrucción if.
if a > b: print("a es mayor que b")

• También se pueden poner las sentencias if – else en una sola línea, si


cada una ejecuta una sentencia. Ejemplo:
print("A") if a > b else print("B")

• O ejecutar mas de una sentencia con if – else en una misma línea, de


la siguiente forma:
print("A") if a > b else print("=") if a == b else
print("B")

HdPyS - Dr. José David Díaz R.


Las sentencias “and” y “or”
• Las sentencias and y or son operadores lógicos y se usan para
combinar declaraciones condicionales:

a = 200
b = 33
c = 500

if a > b and c > a:


print("Ambas condiciones son ciertas")

if a > b or a > c:
print("Al menos una condición es cierta")

HdPyS - Dr. José David Díaz R.


Bucles en Python
• Existen 2 tipos de bucles en Python: “for” y “while”.

• Un bucle “for” se utiliza para iterar sobre una secuencia, representada


como una lista, una tupla, un diccionario, un conjunto de datos o una
cadena de caracteras.

• Con el bucle for podemos ejecutar un conjunto de sentencias, una vez


para cada elemento de una lista, tupla, conjunto, etc.

• Imprime los elementos de la lista (probar con caracteres):


numeros = [2, 3, 5, 7]
for i in numeros:
print(i)

HdPyS - Dr. José David Díaz R.


Bucle for
# Imprime los numeros 0,1,2,3,4
for x in range(5):
print(x)

# Imprime 3,4,5
for x in range(3, 6):
print(x)

# Imprime 3,5,7
for x in range(3, 8, 2):
print(x)

frutas = ["manzana", "platano", "naranja"]


for x in frutas:
print(x)

HdPyS - Dr. José David Díaz R.


Bucle for
• #Itenar sobre la cadena de caracteres

for x in "banana":
print(x)

• “else” en el ciclo for:


– La palabra clave “else” en un bucle for especifica un bloque de
código que se ejecutará cuando finalice el bucle:

for x in range(6):
print(x)
else:
print("Ha finalizado el ciclo!")

HdPyS - Dr. José David Díaz R.


Bucle for
• Bucles anidados:

color = ["rojo", "verde", "azul"]


frutas = ["manzana", "platano", "naranja"]

for y in color:
for x in frutas:
print(x, y)

HdPyS - Dr. José David Díaz R.


Bucle for
• Iterar en un diccionario:
my_dict = {'Platano':'amarillo', 'Limon':'verde',
'Chile':'rojo', 'Cebolla':'blanca’}

#iterando sobre las claves


for item in my_dict:
print(item)

#iterando sobre los valores


for item in my_dict.values():
print(item)

#iterando sobre las claves y los valores


for item, values in my_dict.items():
print(item +'-->'+ values)

HdPyS - Dr. José David Díaz R.


Bucle for en una sola línea
• Creamos una lista en una sola línea:
x= [i**2 for i in range(10)]
• Equivalente a:
x=[]
for i in range(10):
x.append(i**2)

• Otro ejemplo:
y= [ [i,j] for i in range(3) for j in range(3) ]
• Equivalente a:
y=[]
for i in range(3):
for j in range(3):
y.append([i,j])

HdPyS - Dr. José David Díaz R.


Ejercicios
• Pedirle al usuario que introduzca su nombre completo y contar el
número de vocales.

• Genere una variable los primeros 20 numeros de la secuencia de


Fibonacci.

• Pedirle al usuario que introduzca un número positivo (mayor que 2) y


que el programa le indique si es un número primo o no.

• Pedirle al usuario que escriba una palabra y seguidamente una letra, y


que muestre en pantalla las veces que aparece la letra en la frase.

HdPyS - Dr. José David Díaz R.


Bucles while
• Con el ciclo while podemos ejecutar un conjunto de declaraciones
siempre que una condición sea verdadera.

• La condición será evaluada por primera vez antes de ejecutarse


cualquier instrucción que esté dentro del bucle. La condición debe ser
verdadera para entrar al bucle.

• En cada ciclo, la condición es evaluada.

• Para evitar que el bucle sea infinito, hay que garantizar que en algún
momento la condición sea falsa.

HdPyS - Dr. José David Díaz R.


Bucle while
• Sintaxis:
while condición:
instrucción_A
instrucción_B
...

• donde “condición” es una


expresión lógica cuyo
resultado es: True o
False.

HdPyS - Dr. José David Díaz R.


Bucle while
• Bucle ‘while’ controlado por conteo:

suma, iter = 0, 1

while iter <= 10:


suma = iter + suma
print("Iteracion:", iter)
iter = iter + 1

print ("\nLa suma es", suma)

HdPyS - Dr. José David Díaz R.


Bucle while
• Bucle ‘while’ controlado por Evento:

promedio, total, contar = 0.0, 0, 0


nota = int(input("Introduzca la nota de un estudiante (-1 para
salir):"))

while nota != -1:


total = total + nota
contar = contar + 1
nota = int(input("Introduzca la siguiente nota (-1 para salir):"))
promedio = total / contar
print ("Promedio de notas es:", promedio)

HdPyS - Dr. José David Díaz R.


Bucle while
• La continuidad en la ejecución de un bucle while puede ser culminada
por la sentencia ‘brake’:

variable = 10
print('Valor inicial de la variable:', variable)
while variable > 0:
variable = variable -1
if variable == 5:
break
print ('Valor actual de la variable:', variable)

HdPyS - Dr. José David Díaz R.


Bucle while
• La continuidad en la ejecución de un bucle while, puede ser controlada
por la sentencia ‘continue’:

variable = 10
print('Valor inicial de la variable:', variable)
while variable > 0:
variable = variable -1
if variable == 5:
continue
print ('Valor actual de la variable:', variable)

HdPyS - Dr. José David Díaz R.


Bucle while
• La sentencia ‘else’ permite correr algún bloque de código cuando no se
cumpla o se deje de cumplir al condición del while:

variable = 10
print('Valor inicial de la variable:', variable)
while variable > 0:
variable = variable -1
print ('Valor actual de la variable:', variable)
else:
print("Variable es menor que cero")

HdPyS - Dr. José David Díaz R.

También podría gustarte