Python
Python
ingeniería y ciencias
Andreiv Domínguez Martínez
Vidju Press
PYTHON Una introducción
Tecnología
Vidju Press (http://www.vidjupress.org.mx).
Copyright© Python, una introducción
Correo Electrónico: [email protected]
Vidju Press
San Andrés Cholula, Puebla
Teléfono (000)00000
Fax (222)0000000
La imagenes se generaron con el paquete Tikz para LATEXy algunas de ellas se basan en ejemplos disponibles en
la página http://www.texample.net/tikz/examples/.
ÍNDICE GENERAL
PRÓLOGO IX
1 ALGORITMOS Y PYTHON
1.1 Algoritmos
1
1
1.2 Introducción a Python 6
Interfaces de Python 6
1.3 Programas 9
Scripts 9
Funciones 10
1.4 Librerías 12
2 TIPOS DE DATOS 13
3 VARIABLES Y CONSTANTES
3.1 Operadores
17
17
4 FLUJO DE UN PROGRAMA
Condicionales
19
19
Ciclos 20
5 GRÁFICAS
5.1 2D
25
25
Gráficas de funciones 25
5.2 Animación 33
5.3 Turtle 33
5.4 3D 34
5.5 Librerías 36
OpenGL 37
VPython 37
6 ARCHIVOS 39
7 SYMPY 43
8 SCIPY 59
V
9 BASES DE DATOS 61
10 SONIDO Y MÚSICA 63
11 PROCESAMIENTO DE IMÁGENES
11.1 OpenCV
65
66
12 ARDUINO 69
13 SOLUCIONES 71
BIBLIOGRAFÍA 72
“El criterio que orientará a esa educación se basará en los
resultados del progreso científico, luchará contra la ignorancia
y sus efectos, las servidumbres, los fanatismos y los prejuicios.”
Párrafo del Artículo Tercero de la Constitución Política
de los Estados Unidos Mexicanos
VII
Prólogo
Vivimos en un mundo digital, rodeados de dispositvos como teléfonos inteligentes, tabletas o compu-
tadoras. Pero no sólo eso, estamos a las puertas de una revolución tecnológica que traerá la robótica
a nuestras vidas diarias con robots personales o de limpieza, vehículos autónomos, conexión per-
manente a la nube, etc. Tenemos además, la inteligencia artificial y la ciencia de datos, principalmete
para el consumo masivo y las empresas. En esta revolución, llamada Revolución 4.0, la programación
juega un papel crucial y Python en particular por ser el lenguaje de la inteligencia artificial y la ciencia
de datos. Python es un lenguaje accesible y poderoso para el novato y para el programador avanzado.
Esta guía presenta las nociones básicas para comenzar a programar en Python, esperando que el
lector se interese en el maravilloso mundo de los algoritmos y la programación.
Programar es una herramienta en la vida cotidiana, pero es esencial en la ciencia y en la ingeniería para recolectar,
analizar datos y para comunicar resultados. Pero programar significa implementar un algoritmo que automatiza
un proceso y que una computadora pueda llevarlo a cabo, por esta razón comenzamos hablando de algoritmos
antes de hablar sobre Python.
Definición 1. Un algoritmo es una sucesión ordenada de pasos definidos para resolver un problema.
4. Definir el proceso para obtener el resultado. Un proceso se compone principalmente de la toma de decisio-
nes y de realizar operaciones de operaciones.
5. Presentar el resultado.
Otra parte del algoritmo es analizar el tiempo de ejecución mediante el número de operaciones realizadas y la
duración de cada una de ellas para medir la eficiencia, pero esto se estudia en un libro especializado en algorit-
mos.
Escribiendo algoritmos
Un algoritmo puede escribirse en lenguaje cotidiano, pero esto suele introducir errores o ambigüedades. Otra
manera es mediante diagramas de flujo que muestra la ejecución del algoritmo de manera visual, dicho método
es práctico para algoritmos cortos.
1
Inicio
Ingresar
Mundo real
datos
Ajustar Procesar
modelo datos
¿Predice
datos
no
futuros?
si
Alto
A continuación mostramos un ejemplo con un algoritmo para resolver una ecuación cuadrática.
Ejemplo 1. Diseña un algoritmo que calcule las raíces reales de una ecuación cuadrática ax 2 + bx + c = 0.
2
Inicio
Ingresamos
los coefi-
cientes
a, b y c .
Calculamos el
discriminante
D = b 2 − 4ac .
p
no si −b ± D
¿D < 0? ¿D > 0 ? x=
2a
si
no
−b
x=
Sin solucio- 2a
nes reales.
Fin
Una forma alternativa de escribir un algoritmo es mediante pseudocódigo el cual tiene la ventaja de ser similar a
la forma en que se escribe el algorimo en un lenguaje de programación y por lo tanto la implementación es más
3
sencilla.
Ejemplo 2. Escribimos el algoritmo para hallar las raíces reales de una ecuación cuadrática ax 2 + bx + c = 0.
1. Hay tres opciones: que no hay raíces reales, hay una única raíz real o dos raíces reales distintas.
3. El proceso consiste en calcular el discriminate para decidir si hay raíces reales y cuales son.
Se recomienda diseñar algoritmos complejos en forma modular, es decir, dividir en soluciones parciales hasta
integrar una solución global. Esto facilita la estructura y comprensión del algoritmo.
Como en toda actividad cotidiana, de ciencia o de ingeniería, el éxito depende de la planeación y el diseño inicial.
Diseña tu algoritmo antes de programar, efectuando las operaciones y procesos mentalmente y obteniendo re-
sultados válidos. Considera posibles datos válidos de entrada, pero también datos improbables o incorrctos, tu
programa debe responder ante estas situaciones.
Actividad 1.1
1. Diseña un algoritmo que ordene un conjunto de números, por ejemplo que el conjunto 5, 7, 2, 4, 1 lo
escriba de menor a mayor como 1, 2, 4, 5, 7.
2. Diseña un algoritmo para buscar una palabra y su significado en un diccionario. Prueba con diez
palabras de tu elección para diseñar tu algoritmo.
4
5
1.2 Introducción a Python
Para instalar Python por ti mismo está la página https://www.python.org/downloads/ y elegimos la opción de
acuerdo a nuestro equipo.
Las librerías se instalan como se muestra en el documento siguiente https://docs.python.org/3.2/install/
index.html
Como ejemplo del uso de Python tenemos la primera fotografía de un agujero negro que obtuvo en 2019 la es-
tudiante de doctorado del MIT Katie Bouman y actualmente profesora asistente del California Institute of Tech-
nology.
Para usar Python tenemos la interfaz llamada Spyder que viene preinstalada en Anaconda, sólo es necesario abrir
la aplicación. Dentro de Spyder encontramos un editor para escribir programas y una terminal para ejecutarlos,
además de los menús usuales de cualquier programa interactivo.
6
Aplicaciones de Anaconda.
Python en Spyder.
Actividad 1.2
2. Abre Spyder.
3. Ejecuta todos los programas que aparecen en este capítulo, puedes copiar y pegar, con cuidado
porque algunas veces se cambia el tipo de comillas y tenemos que corregirlas.
Python es un lenguaje interpretado, esto significa que puedes escribir comandos directamente en la terminal.
7
Comando en la terminal.
Escribir en la terminal tiene ventajas cuando el programa es corto y será usado una o dos veces, en caso con-
trario es preferible escribir un programa en el editor y guardar el archivo con extensión .py para preservarlo. Se
recomienda que el nombre del programa haga referencia a su utilidad; también es recomendable escribir el au-
tor, una descripción del programa, la fecha y comentar las distintas partes del programa, esto puede ser un poco
tedioso, pero nos ahorrará frustraciones futuras al reutilizar el programa y no recordar lo que hace.
Un programa en el editor.
Ahora ejecutamos el archivo con el botón Ù, que se muestra en la gráfica siguiente, o con la tecla F5.
Un programa en el editor.
El resultado es el siguiente.
Spyder es similar al entorno de Matlab, pero hay otra interfaz de Python que se abre en el navegador y se lla-
ma Jupyter, algunas ventajas de Jupyter es la modalidad interactiva. Es el usuario el que decidirá la interfaz de
acuerdo a sus necesidades y gustos.
8
Elegimos la versión de Python.
Interfaz de Spyder.
1.3 Programas
En Python encontramos dos tipos de programas que describimos por separado.
1.3.1 Scripts
Un script es un programa que se escribe en el editor o en la terminal (se recomienda en el editor) y que se ejecuta
cada vez que se necesita.
Recordemos que un programa requiere de comentarios que ayudan a documentar el objetivo del programa y su
autor, las acciones de un comando o parte de un programa. Los comentarios se indican con # para una sola línea
o """ """ para varia líneas.
9
#Programa que calcula el doble de un número.
#Nombre del programa: Doble.py
#Autor: Andreiv Domínguez Martínez
#Ingresamos el número.
entrada=int(input(’Ingresa el número: ’))
#Realizamos operaciones.
doble=2*entrada
#Mostramos resultados.
print(’El doble del número es:’, doble)
Antes de continuar, hablaremos un poco de las funciones input( ) y print( ) que usamos en el ejemplo anterior.
La función input( ) permite ingresar datos a Python, cabe aclarar que siempre los introduce como una palabra
y es necesario convertir a un número en algunos casos.
Para ingresar una palabra escribimos lo siguiente.
>>> nombre = input("Ingresa el nombre: ")
Ingresa el nombre: Diego
>>> nombre
Diego
Ejercicios 1. Realiza los siguientes programas usando como base el ejemplo anterior.
1.3.2 Funciones
Ya usamos dos funciones que son input( ) y print( ), las funciones son programas que son parte del entorno
de Python. Python incluye gran cantidad de funciones predefinidas, pero cualquiera puede escribir sus propias
funciones. A diferencia de un script que es necesario ejecutar cada vez que se necesita, las funciones se incor-
poran al entorno de Python y pueden llamarse cada vez que es necesario. Una función puede tener cero, uno o
varios valores de entrada, que se llaman argumentos. De manera similar, puede tener cero, uno o múltiples valo-
res de salida que son llamados valores; la salida de una función puede ser una acción. Si una función es corta,
10
entonces puede escribirse directamente en el intérprete, de lo contrario se recomienda escribirlo como un script.
Entradas Salidas
Función
¡Notas una identación en los procedimientos “Operaciones” y “return Valores de salida”?, esto es común en los
lenguajes de programación para dar claridad al código, pero en Python es obligatorio porque esto señala la es-
tructura de los procedimientos correspondientes, será común encontrarlos en este libro y deben escribirse de
la misma manera. Python no utiliza el punto y coma o las llaves que se usan en otros lenguajes para delimitar
partes y procedimientos de código.
En una función, las operaciones breves pueden indicarse en la línea de “Valores de salida”.
Ejemplo 1.
Cuando no es posible escribir las operaciones requeridas en return( ), en este caso podemos escribir la res-
puesta obtenida en las operaciones o escribir none y la función devuelve resultados previamente.
Ejemplo 2.
#Función que calcula el doble de un número.
#Nombre del programa: doble.py
#Autor: Andreiv Domínguez Martínez
>>> doble(-5)
-10
Se recomienda que el nombre de una función o script haga referencia a su funcionalidad, esto aporta claridad
en su uso; por ejemplo valorTemperatura o valorPH.
Ejercicios 2. Realiza las siguientes funciones.
11
1. Calcule la operación 2*m*n.
6. Calcule las raíces de un polinomio cuadrático a partir de los coeficientes, incluyendo soluciones en los números
complejos.
1.4 Librerías
Python hace uso de librerías, que son conjuntos de funciones relacionadas y nos permiten ampliar nuestras he-
rramientas para resolver problemas. Las librerías usadas frecuentemente se enumeran a continuación.
Para hacer uso de una librería, es necesario importarla con el comando import y en ocasiones renombrarla para
abreviar la escritura de comandos de esa librería.
import numpy as np
import matplotlib as mlp
Es posible importar una parte una librería, puede ser una función o una constante.
from numpy import pi
12
2 Tipos de datos
Python tiene los tipos de datos usuales a otros lenguajes de programación.
2. Números flotantes: float. Estos se utilizan para representar números racionales e irracionales, pero si en
las operaciones intervienen múmeros flotantes se recomienda escribir todo en números flotantes con el
uso del punto decimal como 4.0 o -2.0 y otros similares.
3. Cadenas: str. Se usan para representar letras, palabras, cadenas de palabras y datos no númericos. Se
escriben entre comillas o comillas dobles.
’a’, ’Hola’, “Ecribe el primer dato.”
4. Booleanos: bool. Son los valores lógicos de falso (False) y verdadero (True).
5. Números complejos
La unidad imaginaria i se escribe como 1 j en Python, por lo tanto un número complejo a + bi se escribe
como a+b j o como complex(a,b). Python hace algunas operaciones de números complejo, pero para usar
algunas más es necesaria la librería cmath.
Si z = a + b j y w = c + d j son números complejos en Python, tenemos las operaciones básicas siguientes:
La librería cmath (Complex mathematics) permite otras operaciones, pero el número complejo a + b j se
representa como (a, b).
6. Arreglos: list.
Representan arreglos numéricos (conjuntos ordenados). Se escriben entre corchetes A=[5,4,3,6,7] y es-
tán ordenados de 0 a n − 1 con n el número de datos del arreglo. Para acceder a un dato del arreglo es
necesario conocer su posición: A[0] será 0 y A[3] será 6. Hay algunas operaciones de arreglos que usare-
mos y que mencionamos a continuación.
El comando range( ) es una herramienta práctica para crear listas. El comando tiene tres opciones de uso.
13
a) range(n) crea una lista de 0 a n-1 con incrementos de una unidad.
b) range(m,n) crea una lista de m a n-1 con incrementos de una unidad.
c) range(m,n,h) cre una lista de valores que inicia en m hasta n-1 con cambios de h unidades.
Si escribimos el comando range() no se genera una lista, es necesario anteponer el comando list.
>>> list(range(4,10))
[4, 5, 6, 7, 8, 9]
>>> list(range(4,10,2))
[4, 6, 8]
Concatenación
Concatenar unir dos listas en una, una a continuación de la otra.
>>> A=[1,2]
>>> B=[3,4]
>>> A+B
[1, 2, 3, 4]
Con * se crea una nueva lista a partir de una anterior que se repite según se indica en la operación.
>>> A=[1,2]
>>> 5*A
[1, 2, 1, 2, 1, 2, 1, 2, 1, 2]
>>> B=[1]
>>> 15*B
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
Con el comando [m:n] se toman los elementos desde m hasta n-1 y se colocan en una lista nueva.
>>> A=[10,11,12,13,14,15,16,17,18,19,20]
>>> A[2:5]
[12, 13, 14]
>>> A[:5]
[10, 11, 12, 13, 14]
>>> A[3:]
[13, 14, 15, 16, 17, 18, 19, 20]
>>> A[1:7:2] # A[Inicio:Fin:Incremento].
[11, 13, 15]
>>> A[::2] #Seleccionar cada dos elementos a partir del primero.
[10, 12, 14, 16, 18, 20]
>>> A[::4] #Seleccionar cada cuatro elementos a partir del primero.
[10, 14, 18]
14
>>> A[2:5]=[5,6,7]
>>> A
[10, 11, 5, 6, 7, 15, 16, 17, 18, 19, 20]
Otra forma de agregar una lista al final de otra es con .extend( ), este comando no crea una nueva lista,
mantiene los datos en la primera.
>>> B=[22,23,24,25]
>>> A.extend(B)
>>> A
[10, 11, 5, 6, 7, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 22, 23, 24, 25]
La función sum( ) suma los elementos de un conjunto o una lista. Con .pop se borran elementos de una
lista y los guarda en otro valor.
>>> sum(C)
15
>>>a=C.pop(2)
>>>C
[1, 2, 4, 5]
>>>a
3
Con del A[i] se borra el elemento en el lugar i. Con .remove(m) se borra el elemento m. Observa la dife-
rencia.
>>>A=[1,2,3,4,5]
>>>del A[0]
>>>A
[2, 3, 4, 5]
>>>A.remove(3)
>>>A
[2, 4, 5]
>>>B=[1,2,3,4,5,6,7]
>>>del B[2:5]
>>>B
[1, 2, 6, 7]
Por último, comentamos que una cadena son tratadas como listas.
15
>>> c="Hola"
>>> c[0]
H
>>> c[1]
0
7. Diccionarios: dict. Son datos relacionados en parejas como una tabla de datos.
>>> Datos[’Mayra’]
25
>>> Datos[’Ana’]
22
En un diccionario, a los valores de la primera columna se le llama claves (keys) y los de la segunda se
llaman valores, cada columna puede extraerse. En un diccionario es posible agragar otros datos.
>>> Datos.keys()
dict_keys([’Mayra’, ’Daniela’, ’Rafael’, ’Ana’])
>>> Datos.values()
dict_values([25, 27, 28, 22])
>>> ’Mayra’ in Datos
True
>>> Datos[’David’]=23
>>> Datos
{’Mayra’: 25, ’Daniela’: 27, ’Rafael’: 28, ’Ana’: 22, ’David’: 23}
Tanto las claves, como los valores pueden ser datos de distinto tipo.
16
3 Variables y constantes
Definición 1. Una variable es un valor que puede modificarse en un programa.
Las variables se representan por un nombre que puede ser una letra, pero se recomienda usar nombres que ha-
cen referencia la papel que representa la variables como valorPromedio. La asignación de valores a una variable
es de derecha a izquierda con el signo de igualdad, como valorPromedio=4, esto significa que el número 4 se
asigna a la variable valorPromedio. No debe entenderse la asignación de valores como una igualdad matemática
o caeríamos en contradicciones, por ejemplo la expresión i=i+1 significa que al valor de i se le suna 1 esto se
asigna a la misma variable.
Definición 2. Una constante es un valor que no puede ser modificado durante la ejecución de un programa.
Como ejemplo tenemos el valor de π.
3.1 Operadores
Operadores aritméticos
En Python podemos usar el último resultado en una nueva operación mediante el símbolo guión bajo: _.
>>> 2*5
10
>>> _ + 8
18
>>> _ / 2
9.0
Operadores relacionales
17
>>> 1<2
True
>>> 4==5
False
>>> 7>=3
True
Operadores lógicos
Estos relacionan proposiciones lógicas.
1. Conjunción: and
2. Disyunción: or
3. Negación: not
18
4 Flujo de un programa
Un algoritmo (por lo tanto también un programa) generalmente se basa en dos tipos de estructuras.
4.0.1 Condicionales
La condicionales se clasifican por un caso, dos casos y casos múltiples.
#Condicional de un caso.
if Condición logica:
Procedimiento
#Condicional de un caso.
if a>0:
a=a+5
Para casos múltiples tenemos dos casos. El primero ocurre cuando tenemos varios casos posibles y uno último
en caso de no cumplirse alguno de los anteriores.
19
El código se ejecuta secuencialmete hasta hallar una proposición lógica que sea verdadera, entonces se ejecuta
el procedimiento asociado y salimos del condicional. En caso de tener todas las proposiciones lógicas falsas, se
ejecuta el procedimiento alternativo.
Ejemplo 1.
#Calificación
if 9 <= calificacion <= 10:
print(’Excelente’)
elif calificacion == 8:
print(’Bueno’)
elif calificacion == 7:
print(’Aceptable’)
elif 0 <= calificacion <= 6:
print(’No suficiente’)
else:
print(’Dato incorrecto’)
El procedimiento alternativo puede quedar vacío, se ejecutura el procedimiento cuya proposición lógica asociada
sea verdadera. En caso de resultar falsas las proposiciones lógicas, no se ejecuta acción alguna.
#Condicional de casos múltiples sin procedimiento alternativo.
if Proposición lógica 1:
Procedimiento 1
elif Proposición lógica 2:
Procedimiento 2
elif Proposición lógica 3:
Procedimiento 3
Ejemplo 2.
#Calificación
if 9 <= calificacion <= 10:
print(’Excelente’)
elif calificacion == 8:
print(’Bueno’)
elif calificacion == 7:
print(’Aceptable’)
elif 0 <= calificacion <= 6:
print(’No suficiente’)
else:
print(’Dato incorrecto’)
Las condicionales pueden anidarse, es decir, puede escribirse una dentro de otra.
4.0.2 Ciclos
Un ciclo ejecuta un procedimiento cierto numero de veces.
For
El ciclo for realiza un procedimiento un número de veces dado por un rango o una lista. Su estructura se muestra
a continuación.
#Estrucutura de un ciclo for.
for i in Lista:
Procedimiento
20
En un ciclo for es posible usar el comando range( ) sin necesidad de convertir a lista.
Ejemplo 3.
for i in range(11):
print(i,i**2)
Este es el resultado.
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
While
El ciclo while se ejecuta mientras una condición lógica sea verdadera, mostramos su estructura. Generalmente
un ciclo while lleva una variable asociada llamada contador y sirve para evaluar la condición lógica.
Ejemplo 4.
a=0 #Valor inicial
while a<=10: #Condición lógica
print(a) #Imprimir el número
a+=1 #Incrementa el valor de a en 1.
El resultado es el siguiente.
0
1
2
3
4
5
6
7
8
9
10
En el ciclo while primero se verifica la condición y si es verdadera se ejecuta el procedimiento, este ciclo puede no
ejecutarse ni una vez si la proposición resulta falsa para el valor inicial del contador. Una vez que el ciclo resulta
falso, el ciclo se detiene. Se debe tener cuidado para no obtener un ciclo sin fin.
21
Break
El comando break se utiliza para detener un ciclo una vez que se cumpla una condición adicional, puede consi-
derarse como una opción de escape del ciclo.
Ejemplo 5.
#Estructura de la función break.
while True:
print(’Escribe Salir para terminar el programa.’)
line = input(’> ’)
if line == ’Salir’:
break
print(line)
print(’¡Te deseo un buen día!’)
Ejemplo 6.
#Programa que calcula los cuadrados de un número natural desde uno hasta
#infinito.
x=1
while x>0:
print(’Presiona la tecla "Enter" para continuar, escribe "Salir" o
"S" para salir’)
entrada=input()
if entrada==’Salir’ or entrada==’S’:
break
else :
print([x,x**2])
x+=1
print(’Programa terminado’)
[8, 64]
Presiona la tecla "Enter" para continuar, escribe "Salir" o "S" para salir
[9, 81]
Presiona la tecla "Enter" para continuar, escribe "Salir" o "S" para salir
[10, 100]
Presiona la tecla "Enter" para continuar, escribe "Salir" o "S" para salir
Actividad 4.1
1. Diseña e implementa un algoritmo, mediante el ciclo while, que obtenga la sucesión de Fibonacci
que sean menores a 1000. Recuerda que la suceción de Fibonacci es 1, 1, 2, 3, 5, 8, 13,...
2. Diseña
µ ¶ e implementa un algoritmo, mediante el ciclo while, que obtenga los términos de la sucesión
1
mayores a una tolerancia d el t a de 0, es decir, que su distanncia a d el t a sea mayor que cero.
n
3. Diseña e implemente un algoritmo que indique si una persona puede ingresar a un lugar sólo cuando
es mayor de edad, haga uso del condicional if.
22
4. Diseña e implementa un algoritmo, con el ciclo for, que obtenga el promedio de los números 0 a 10.
23
5 Gráficas
https://www.southampton.ac.uk/~feeg1001/notebooks/Matplotlib.html
https://matplotlib.org/3.1.1/tutorials/colors/colormaps.html
5.1 2D
Para realizar gráficas necesitamos algunas librerías como Numpy, Sympy y Matplotlib.
"""
Created on Tue Mar 26 16:23:09 2019
@author: andreiv
"""
# Definir la función
y = np.sin(x)
#Gráfica de la función.
plt.plot(x, y)
#Mostrar la gráfica
plt.show()
25
1.00
0.75
0.50
0.25
0.00
0.25
0.50
0.75
1.00
4 3 2 1 0 1 2 3 4
El siguiente código muestra los elementos esenciales para elaborar la gráfica de una función.
#basica.py
@author: Andreiv
"""
#Nombre de ejes
plt.xlabel(’x’)
plt.ylabel(’y’)
#Mostrar la gráfica
plt.show()
26
1.00
0.75
0.50
0.25
0.00
y
0.25
0.50
0.75
1.00
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
x
Figura 5.2. Ejemplo de una gráfica básica en Python
Para mejorar la gráfica tenemos muchas opciones, algunas de ellas se muestran con un ejemplo a continuación.
"""#Cap05_02.py
@author: Andreiv
"""
#Importamos las librerías
import numpy as np
import matplotlib.pyplot as plt
27
#Nombre de ejes
plt.xlabel(’x’)
plt.ylabel(’y’)
#Título de la función
plt.legend(loc=’upper right’)
#Título de la gráfica
plt.suptitle(u’Máximos y mínimos’)
#Estilo de los ejes.
plt.axhline(color = ’black’, linewidth=2.0, zorder=-1)
plt.axvline(color = ’black’, linewidth=2.0, zorder=-1)
# Guardar gráfica en archivo
plt.savefig(’seno1.pdf’)
# Mostrar gráfica en pantalla
plt.show()
Máximos y mínimos
1.5
Maximo local f(x) = sen(x)
1.0
0.5
0.0
y
0.5
1.0
Minimo local
1.5
0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0
x
"""
@author: Andreiv
28
"""
# Definir la función
y4 = np.sin(4*x)
#Cuadrícula
plt.grid(True)
#plt.legend(loc=’upper left’)
#Nombre de ejes
plt.xlabel(’x’)
plt.ylabel(’y’)
#Título de la función
plt.legend(loc=’upper right’)
#Título de la gráfica
plt.suptitle(u’’)
29
# Mostrar gráfica en pantalla
plt.show()
B=4
1
0
y
0 2
3
2
2 5
2
3 7
2
4
x
Figura 5.4. Cambiamos las etiquetas de los ejes.
import numpy as np
import matplotlib.pyplot as plt
r = np.arange(0, 5, 0.01)
theta = 5 * np.pi * r
ax = plt.subplot(111, projection=’polar’)
ax.plot(theta, r)
ax.set_rmax(2)
ax.set_rticks([0.5, 1, 1.5, 2]) # Indicamos las etiquetas radiales.
ax.set_rlabel_position(-22.5) # Ángulo de las etiquetas radiales.
ax.grid(True)
30
Vectores
ax = plt.axes()
ax.arrow(0, 0, 0.5, 0.5, head_width=0.05, head_length=0.1, fc=’k’, ec=’k’)
plt.show()
31
Gráficas de pastel
# Gráfica de pastel con los datos ordenados en contra de las manecillas del reloj:
labels = ’Fútbol’, ’Atletismo’, ’Natación’, ’Basquetbol’
sizes = [30, 20, 25, 25]
explode = (0, 0, 0, 0) # No se resalta rebanada alguna.
plt.show()
# Gráfica de pastel con los datos ordenados en contra de las manecillas del reloj:
labels = ’Fútbol’, ’Atletismo’, ’Natación’, ’Basquetbol’
sizes = [30, 20, 25, 25]
explode = (0, 0.1, 0, 0) # Resaltamos la segunda rebanada: Atletismo.
plt.show()
32
5.2 Animación
25
20
15
10
0
3 2 1 0 1 2 3
5.3 Turtle
33
end_fill()
done()
https://docs.python.org/3.2/library/turtle.html
5.4 3D
@author: Andreiv
"""
#matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure(1,dpi=300)
ax = plt.axes(projection=’3d’)
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
ax.set_xlabel(’x’)
ax.set_ylabel(’y’)
ax.set_zlabel(’z’);
plt.savefig(’Funcion2b.jpg’)
# Mostrar gráfica en pantalla
plt.show()
#ax.view_init(60, 35)
#fig
https://matplotlib.org/users/colormaps.html
https://jakevdp.github.io/PythonDataScienceHandbook/04.12-three-dimensional-plotting.html
https://matplotlib.org/gallery/index.html
34
from matplotlib.pyplot import *
from numpy import *
figure(1)
CS = contour(X, Y, Z, cmap=cm.coolwarm)
clabel(CS, inline=1, fontsize=10)
title(’Gráfica de contornos’)
show()
fig = figure(2)
ax = fig.gca()
heatmap = ax.imshow(Z, cmap = cm.coolwarm)
fig.colorbar(heatmap, shrink = 0.5, aspect=5)
title(’Mapa de calor’)
show()
fig = figure(3)
ax = fig.gca(projection=’3d’)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False)
ax.set_zlim(-2.01, 2.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter(’ %.02f’))
35
Figura 5.6. Resultado de la segunda gráfica.
https://www.cs.toronto.edu/~guerzhoy/411/lec/W01/numpy/Numpy3d.html
5.5 Librerías
Una de las librerías para gráficas más comunes en el mundo de la programación es OpenGL, de ella hablaremos
brevemente en esta sección. También hablaremos de una librería nativa de Python llamada VPython.
36
5.5.1 OpenGL
La librería OpenGL se instala en Anaconda con alguno de los comandos siguientes:
import sys
import OpenGL.GL as gl
import OpenGL.GLUT as glut
def display():
glut.glutSwapBuffers()
def reshape(width,height):
gl.glViewport(0, 0, width, height)
glut.glutInit()
glut.glutInitDisplayMode(glut.GLUT_DOUBLE | glut.GLUT_RGBA)
glut.glutCreateWindow(’Hello world!’)
glut.glutReshapeWindow(512,512)
glut.glutReshapeFunc(reshape)
glut.glutDisplayFunc(display)
glut.glutKeyboardFunc(keyboard)
glut.glutMainLoop()
5.5.2 VPython
Para instalar VPython escribimos conda install -c vpython vpython
37
6 Archivos
Es momento de abordar la lectura y escritura de archivos de datos en formatos permanentes como texto.
Comenzamos con un archivo llamaddo Edades.txt que contiene las edades de un equipo de estudiantes. Abrimos
el archivo con open( ). Para abrir la carpeta que contiene el archivo puedes usar los comandos ls que muestra
los archivos y subcarpetas de la carpeta actual y el comando cd para cambiar a la carpeta requerida.
>>> cd LIBRO/images/Python/
C:\Users\mxstu\Desktop\ESTADÍSTICA\LIBRO\images\Python
>>> edades=open(’Edades.txt’)
La función lee cada línea siguiente siguiente al ejecutarse. Si queremos ver los datos es preferible usar un ciclo
for.
edades = open(’Edades.txt’)
for line in edades :
datos = line.strip()
print(datos)
Para usar Python con los datos es necesario tener los datos en forma de arreglo.
edades = open(’Edades.txt’)
for line in edades :
arregloEdades.append( int(line.strip()) )
print(arregloEdades)
[15, 17, 15, 14, 16, 17, 16, 16]
Para guardar o crear datos en un archivo de texto se usa la función open(’nombre.txt’, ’w’) para crear el
archivo.
salida = open(’Costos.txt’, ’w’)
39
>>> line1 = "1000\n"
>>> salida.write(line1)
5
Para guardar datos en un archivo es necesario que sean en formato str, de lo contrario es necesario usar la
función .write(str( ))
a=2000
salida.write(str(a))
Hay otra manera de leer archivos .txt usando la librería Numpy, si tenemos un archivo llamado archivo.txt con
dos columnas de datos.
1 4
2 3
3 5
4 1
5 2
Leemos el archivo y lo convertimos en arreglos de Python.
datos=open(’archivo.txt’)
5.0
4.5
4.0
3.5
3.0
2.5
2.0
1.5
1.0
import numpy as np
import matplotlib.pyplot as plt
40
# Leer datos desde archivo
xdata, ydata = np.loadtxt(’datos.txt’, unpack=True)
# Definir la función
y = np.exp(x)
# Crear gráfica
plt.figure(1, figsize = (8,6) )
plt.plot(x, y, ’b-’, label=’exp(x)’)
plt.plot(xdata, ydata, ’ro’, label="data")
plt.xlabel(’x’)
plt.ylabel(’y’)
plt.legend(loc=’upper right’)
plt.axhline(color = ’gray’, zorder=-1)
plt.axvline(color = ’gray’, zorder=-1)
20.0 f(x)=exp(x)
datos
17.5
15.0
12.5
10.0
y
7.5
5.0
2.5
0.0
−3 −2 −1 0 1 2 3
x
El resultado es array([[5, 6, 4, 3, 8, 9]]). Un arreglo de una dimensión en formato .mat se lee como un
arrego de tamaño 1 × n , aunque son equivalentes Python no los considera objetos iguales.
41
Actividad 6.1
2. Escribe un programa que lea las edades de tus compañeros y las guarde en un archivo de texto.
42
7 Sympy
La librería Sympy se utiliza para matemática simbólica, esto nos permite realizar operaciones con números ra-
cionales, irracionales o expresiones algebraicas. Importamos la librería.
>>> r = sym.Rational(2, 5)
>>> r
2/5
>>> r**2
4/25
>>> s=sym.pi
>>> s
pi
>>> t=sym.pi.evalf()
>>> t
3.14159265358979
Álgebra
Para usar literales tenemos los ejemplos siguientes.
>>> x = sym.Symbol(’x’)
>>> y = sym.Symbol(’y’)
Los resultados tienen el formato de Python, pero es posible obtener un resultado más presentable y simbólico,
para ello llamamos una librería y algunas de sus funciones.
from sympy import init_printing
from sympy import init_session
init_session()
Las librerías pueden requerir la instalación de un lenguaje para composición de textos matemáticos y científicos
llamado LATEX, que también es software libre y se puede conseguir para distintos sistemas operativos. Este libro
se escribió en LATEX.
1. Linux: TexLive.
43
Al cargar las librerías y sus opciones adicionales el resultado cambia y es fácil leerlo.
>>> 2*x+4*y-5*x+7*y
−3x + 11y
Mostramos algunass operaciones algebraicas como el desarrollo de polinomios y otras.
>>> sym.expand((x + y) ** 5)
x 5 + 5x 4 y + 10x 3 y 2 + 10x 2 y 3 + 5x y 4 + y 5
Ecuaciones
Resolvemos ecuaciones lineales y cuadráticas. Todos las ecuaciones deben estar igualadas a cero.
Ejemplo 1. Resolvemos las ecuaciones siguientes.
1. 3x + 5 = 0
2. x + 2y = −1
5x + 2y = 5
3. x 2 − 5x + 6 = 0
#Ecuaciones cuadráticas.
>>> sym.solveset(x**2 - 5*x + 6, x)
{2, 3}
Incluso resuelve ecuaciones con funciones como e x = 1
>>> sym.solveset(sym.exp(x) - 1, x)
{2ni π | n ∈ Z}
Límites
Sympy calcula límites con el siguiente código.
sym.limit(Función, Variable independiente, Valor al que tiende la variable independiente)
44
1. lı́m sen(x)
x→0
1
2. lı́m
x→∞ x
1
3. lı́m
x→0 x
>>> sym.limit(sym.sin(x) / x, x, 0)
1
>>> sym.limit(1 / x, x, 0)
∞
Para calcular límites laterales se agrega un ’+’ para límites por la derecha y ’-’ para límites por la izquierda.
Ejemplo 3. Calculamos dos límites al infinito.
1
1. lı́m
x→3+ x −3
1
2. lı́m−
x→3 x −3
Derivadas
Las derivadas de orden superior se calculan con la función
sym.diff(Función, Variable independiente)
1. f (x) = tan x
2. g (x) = cos(x 2 )
>>> sym.diff(sym.tan(x), x)
tan2 (x) + 1
>>> sym.diff(sym.cos(x**2), x)
−2x sin x 2
¡ ¢
45
>>> sym.diff(sym.sin(x**2), x, 1)
2x cos(x 2 )
>>> sym.diff(sym.sin(x**2), x, 3)
−4x 2x 2 cos x 2 + 3 sin x 2
¡ ¡ ¢ ¡ ¢¢
Series de Taylor
Calculamos las seriers de Taylor de las funciones f (x) = e x y tan(x).
>>> sym.series(sym.exp(x), x)
2 3 x4 x5
1 + x + x2 + x6 + 24 + O x6
¡ ¢
+ 120
>>> sym.series(sym.tan(x), x)
3 5
x + x3 + 2x
¡ 6¢
15 + O x
Integrales
En Python podemos calcular integrales indefinidas y definidas.
Ejemplo 5. Calculamos dos integrales indefinidas.
Z
1. x9d x
Z
2. cos xd x
>>> sym.integrate(x ** 9, x)
x10
10
>>> sym.integrate(sym.cos(x), x)
sen(x)
Para las integrales definidas agregamos los límites de integración, esto incluye las integrales impropias.
Ejemplo 6. Calculamos tres integrales indefinidas.
Z 1
1. x2d x
−1
Z π
2
2. cos xd x
− π2
Z 0
3. exd x
−∞
46
Gráficas de funciones
Sympy nos permite graficar funciones, funciones paramétricas y funciones cuyo dominio es de dos variables,
esto lo hace mediante la librería matplotlib, no olvides el comando %matplotlib si quieres las gráficas en forma
interactiva.
#Una gráfica.
>>> plot(expr, rango, **kwargs)
>>> x = symbols(’x’)
>>> plot(x**2, (x, -5, 5))
f(x)
25
20
15
10
0
−4 −2 0 2 4
x
47
Función
y
25
20
15
10
0
−4 −2 0 2 4
x
Función
y
25
20
15
10
0
−4 −2 0 2 4
x
48
f(x)
20
10
0
−3 −2 −1 0 1 2 3
x
−10
−20
7.5
5.0
2.5
0.0
−3 −2 −1 0 1 2 3
−2.5 x
−5.0
−7.5
49
f(x)
100
80
60
40
20
0
−10.0 −7.5 −5.0 −2.5 0.0 2.5 5.0 7.5 10.0
x
1.00
0.75
0.50
0.25
0.00
−1.00 −0.75 −0.50 −0.25 0.00 0.25 0.50 0.75 1.00
−0.25
−0.50
−0.75
−1.00
50
>>> plot_parametric((cos(t), sin(t), (t, -5, 5)), (t, cos(t), (t, -5, 5)))
1.00
0.75
0.50
0.25
0.00
−4 −2 0 2 4
−0.25
−0.50
−0.75
−1.00
El dominio de una función paramétrica es de −10 a 10 por defecto, cuando no se indica. Las opciones de gráfica
coincide con lass mencionadas para las funciones.
Las superficies 3D pueden graficarse con la misma facilidad, para ello importamos las librerías.
>>> from sympy import symbols
>>> from sympy.plotting import plot3d
50
40
30
20
10
4
2
−4 0
−2 0 −2
2 4 −4
51
x2 + y2
50
40
30
20
10
4
2
−4 0
−2 −2 y
0
x 2 −4
4
50
40
30
20
10
0
−10
−20
4
2
−4 0
−2 0 −2
2 4 −4
>>> plot3d((x**2 - y**2, (x, -5, 5), (y, -5, 5)), (x**2+y**2, (x, -3, 3), (y, -4, 4)))
52
20
10
0
−10
−20
4
2
−4 0
−2 0 −2
2 4 −4
Figura 7.12. Superficis dadas por f (x, y) = x 2 − y 2 y f (x, y) = x 2 + y 2 con distinto dominio.
#Una superficie.
>>> plot3d(expr, range_x, range_y, **kwargs)
>>> t = symbols(’t’)
>>> plot3d_parametric_line(2*cos(3*t), 2*sin(3*t), t, (t, -5, 5))
53
4
−2
−4
1.5
1.0
0.5
−1.5 0.0
−1.0 −0.5
−0.5
0.0 −1.0
0.5 −1.5
1.0
1.5
4
2
0
−2
−4
4
3
2
−4 −3 1
−2 −1 0
−1
0 1 −2
2 3 −3
4 −4
#Superficies múltiples.
plot3d_parametric_surface((expr_x, expr_y, expr_z, rango_s, range_t), ..., **kwargs)
Declaramos las variables y gráficamos una superficie (cos s sen t , sen s sen t , cos t ) con 0 ≤ s ≤ 2π y 0 ≤ π.
54
>>> s, t = symbols(’s t’)
>>> plot3d_parametric_surface(cos(s)*sin(t), sin(s)*sin(t), cos(t), (s, 0, 2*sym.pi), (t, 0, sym.pi))
1.00
0.75
0.50
0.25
0.00
−0.25
−0.50
−0.75
−1.00
1.00
0.75
0.50
0.25
−1.00 0.00
−0.75
−0.50 −0.25
−0.25
0.00 −0.50
0.25 −0.75
0.50
0.75 −1.00
1.00
>>> from sympy import plot_implicit, cos, sin, symbols, Eq, And
#Dominio indicado.
>>> plot_implicit(Eq(x**2 + y**2, 16), (x, -10, 10), (y, -10, 10))
y
0
−4 −2 0 2 4
x
−2
−4
55
y
4
0
−4 −2 0 2 4
x
−2
−4
0
−4 −2 0 2 4
x
−2
−4
Matrices
Sympy opera con matrices numéricas o algebraicas.
>>> sym.Matrix([[3, 0], [0, 3]])
· ¸
3 0
0 3
56
· ¸
1 x
1 y
>>> A**2
· ¸
x +1 xy +x
y +1 x + y2
Ecuaciones diferenciales
Con la función dsolve Sympy puede resolver algunas ecuaciones diferenciales ordinarias.
Resolvemos la ecuación.
>>> sym.dsolve(f(x).diff(x, x) - f(x), f(x))
f (x) = C 1 e −x +C 2 e x
57
8 Scipy
59
9 Bases de datos
Las bases de datos se utilizan para almacenar datos en forma de tabla.
Importamos la librería.
import sqlite3
#Cerrar.
conn.close()
61
$ sudo apt-get update
$ sudo apt-get install sqlite3
$ sudo apt-get install sqlitebrowser
62
10 Sonido y música
"""
Created on Tue Mar 26 10:48:40 2019
@author: Andreiv
"""
import numpy as np
import wave
import struct
#Frecuencia de la onda.
frequencia = 220
# Tasa de muestreo
tasa_muestreo = 48000.0
amplitud = 16000
nframes=num_muestras
comptype="NONE"
compname="not compressed"
nchannels=2
sampwidth=2
wav_file=wave.open(file, ’w’)
for s in onda_seno:
wav_file.writeframes(struct.pack(’h’, int(s*amplitud)))
https://www.pythonforengineers.com/audio-and-digital-signal-processingdsp-in-python/
63
11 Procesamiento de imágenes
El procesamiento de imágenes es sencillo en Python, una imagen puede convertirse a un arreglo y un arreglo a
una imagen. Son necesarias algunas librerías.
Imágenes simples
Definimos una matriz.
imagen=np.array([[.5,0],[0,.5]])
plt.imshow(imagen)
import numpy as np
import matplotlib.pyplot as plt
65
11.1 OpenCV
Instalar OpenCV en Windows 10.
1. Al instalar Anaconda, elegir “Add Anaconda to the system PATH environment variable” y “Register Anaconda
as the system Python 3.x”.
2. Comprueba la instalación en una terminal del sistema.
a) python -V
Python 3.7.3
b) pip -V
pip 19.0.3 from C:\ProgramData\Anaconda3\lib\site-packages\pip (python 3.7)
Ambos resultados deben ser positivos.
Se recomienda actualizar pip con python -m pip install -U pip.
3. Descarga el archivo que que corresponde a tu sistema operativo y versión de Python de la página https:
//www.lfd.uci.edu/~gohlke/pythonlibs/#opencv, en este caso fue el archivo
opencv_python-3.4.6+contrib-cp37-cp37m-win_amd64.whl
Processing c:\users\mxstu\opencv_python-3.4.6+contrib-cp37-cp37m-win_amd64.whl
Installing collected packages: opencv-python
Successfully installed opencv-python-3.4.6+contrib
66
import cv2
# Leemos la imagen.
imagen = cv2.imread("python-logo.png")
Puedes usar cualquier imagen, pero el archivo y la imagen deben estar en la misma carpeta.
import numpy as np
import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("No fue posible abrir la camara")
exit()
while True:
# Capturar cuadro por cuadro.
ret, cuadro = cap.read()
# si cuadro puede leerse correctamente, entonces ret es True
if not ret:
print("No se recibe cuadro. Saliendo...")
break
# Nuestras operaciones sobre el cuadro van aqui
gray = cv.cvtColor(cuadro, cv.COLOR_BGR2GRAY)
# Mostrando el cuadro resultante
cv.imshow(’cuadro’, cuadro)
if cv.waitKey(1) == ord(’q’):
break
# Cuando todo esta hecho, lanzar la captura
cap.release()
cv.destroyAllWindows()
67
https://programarfacil.com/blog/vision-artificial/instalar-opencv-python-anaconda/
https://docs.opencv.org/3.4/d6/d00/tutorial_py_root.html
68
12 Arduino
69
13 Soluciones
71
Bibliografía
[1] Peter Agger, et al. “A Practical Guide to Biomedical Research for the Aspiring Scientist”. Springer
International Publishing AG. 2017.
[2] Gerardo Ayala San Martín “Algoritmos y programación”. Universidad de las Américas-Puebla. 2018.
[3] Allen Downey. “Think Python: How to Think Like a Computer Scientist”. Green Tea Press, 2015. https:
//greenteapress.com/wp/think-python-2e/
[4] John Kitchin. “pycse - Python3 Computations in Science and Engineering”. Carnegie Mellon University,
2015. http://kitchingroup.cheme.cmu.edu/pycse/pycse.pdf
[5] Gaël Varoquaux, et al. “Scipy Lecture Notes”. Green Tea Press, 2015. http://scipy-lectures.org/
73