Download INTRODUCCIÓN A LA PROGRAMACIÓN CIENTÍFICA CON PYTHON

Document related concepts
no text concepts found
Transcript
INTRODUCCIÓN A LA
PROGRAMACIÓN
CIENTÍFICA CON PYTHON
Juan M. Sayol
[email protected]
Copyright © 2001-2016
Python Software Foundation.
All rights reserved.
http://www.python.org/
Ejemplos
4
PRIMEROS
PASOS
5
¿Qué es Python?
Lenguaje interpretado, multiparadigma y de
propósito general creado en los años 90 por
Guido van Rossum.
¿Interpretado?
Realiza la traducción del código instrucción a instrucción.
.
¿Mutiparadigma?
Permite la programación orientada a objetos,
imperativa y funcional.
¿Propósito general?
Videojuegos, aplicaciones y servidores web, conexiones
con hardware, … y computación científica
6
¿Por qué Python?
- Lenguaje diseñado para ser claro y sencillo a la par que
potente.
- Lenguaje libre (gratuito).
- Estable y con múltiples módulos y
extensiones.
- Multipropósito: uso intensivo
a nivel empresarial y académico.
- Red de desarrolladores y usuarios sólida, bien
establecida y activa.
7
¿Cómo se instala?
- Python ya viene instalado en los entornos Linux y
debe ser instalado para Windows y MAC OS.
- Hay múltiples editores (entornos de trabajo) siendo
los más utilizados Spyder y Jupyter.
- Existen paquetes (todo en uno) que facilitan la
instalación del compilador y el editor así como de los
módulos que son de nuestro interés: p.ej. Conda o
Python(x,y).
- En este curso vamos a utilizar Conda en su versión
para Python 2.7
http://conda.pydata.org/miniconda.html
8
Spyder
La extensión es .py
Escribir
código.
Ver variables
archivos, …
Ejecutar comandos, ver
el historial de códigos,
cambiar de terminal, …
9
Ves a intérpretes (7ª pestaña), abre una terminal de Python y escribe en ella:
[1]: import this
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Bello es mejor que feo.
Explícito es mejor que implícito.
Simple es mejor que complejo.
Complejo es mejor que complicado.
Plano es mejor que anidado.
Disperso es mejor que denso.
La legibilidad cuenta.
Los casos especiales no son tan especiales como para quebrantar las reglas.
Lo práctico gana a lo puro.
Los errores nunca deberían dejarse pasar silenciosamente.
A menos que hayan sido silenciados explícitamente.
Frente a la ambigüedad, rechaza la tentación de adivinar.
Debería haber una -y preferiblemente sólo una- manera obvia de hacerlo.
Aunque esa manera puede no ser obvia al principio a menos que usted sea holandés.
Ahora es mejor que nunca.
Aunque nunca es a menudo mejor que ya mismo.
Si la implementación es difícil de explicar, es una mala idea.
Si la implementación es fácil de explicar, puede que sea una buena idea.
Los espacios de nombres (namespaces) son una gran idea ¡Hagamos más de esas cosas!
10
Módulos básicos
Numpy
Scipy
Matplotlib
• Operaciones matemáticas básicas,
matrices y álgebra lineal.
• Optimización, integración,
resolución EDOs, FFT, …
• Gráficas y operaciones emulando
las funciones de MATLAB.
11
Importar módulos o librerías
- Se importan al principio del programa principal (script).
- Se debe conocer de antemano la librería a utilizar.
- Hay dos maneras:
1) : import modulo
2) : from modulo import *
- Si sólo necesitamos un paquete del módulo:
1) : import modulo.paquete
2) : from modulo import paquete
- Podemos usar alias para simplificar la notación:
1) : import modulo as md
13
Importar módulos o librerías: Ejemplo
Importemos él módulo numpy:
: import numpy as np
Ahora los paquetes y subpaquetes tienen la forma:
np.paquete.subpaquete (si existe)
Las palabras de color verde representan funciones
reservadas con un significado ya asignado en Python.
Cualquier otro uso debe evitarse.
Ahora podemos utilizar el modulo numpy, por ejemplo
para calcular el seno de (π/2):
: np.sin(np.pi/2.)
14
Programación científica en Python
a) Todo en uno
Ventajas: Todo el código es visible. Sencilla de hacer.
Desventajas: Muy ineficiente para códigos
medianamente largos. No es repetible.
b) Funcional
Ventajas: Permite individualizar las tareas
optimizando el código, es decir tiempo y memoria.
Fácilmente transportable y adaptable.
Desventajas: Requiere claridad, una jerarquía bien
establecida. Más compleja.
15
Tipos de variable
: type()
a) Números enteros (integer)
: a=1
b) Reales (float)
: a=1.5
c) Complejos (complex)
: a=1.5+2j
d) Cadenas de caracteres (string)
: a=“toto”
Asignaciones múltiples
: x = y = z= 0.
: x, y, z= 0., 0., 0.
16
Estructuras secuenciales básicas
a) FOR
: for kk in range(1,100):
:
b) IF
c) WHILE
print kk**2
: if kk ==2:
:
np.sqrt(kk)
: elif kk==3:
:
np.cos(kk)
: else:
:
np.sin(kk)
: while kk<=4:
:
print “Número incorrecto”
17
Funciones
Permiten la creación de algoritmos especializados –es decir,
que realizan una tarea específica- que se prevé van a ser empleados
múltiples veces.
Se definen como:
: def function()
………..
return …
Ejemplo de función, calcular el seno cociente, z=sin(x)/x:
: import numpy as np
:
: def senc(x)
:
z= np.sin(x)/x
:
return z
Se guardará como senc.py. Es importante mantener una consistencia
entre el nombre de la función y el del archivo donde se guarda.18
Algunos comandos útiles
1) Ejecutar programas en iPython:
: %run programa.py
2) Saber variables activas:
: whos
3) Acceder a la última salida:
:_
4) Acceder a una salida anterior y hacer operaciones con ella:
: _12*3
5) Borrar una o varias variables.
: del var1, var2, var3
6) Vaciar la memoria.
: %reset
7) Listar, saber el directorio actual o cambiar de directorio (como en
Linux).
: cd, pwd, ls
8) Añadir directorios .
: import sys
: sys.path.append(“path")
19
Desarrollemos una función …
"""
Programa para calcular el seno cociente de una magnitud.
z = senc(x), donde x = número real
"""
import numpy as np
# Función seno cociente
def senc(x):
z=np.sin(x)/x
return z
# Caso particular que introducimos manualmente desde la
# terminal
x=float(raw_input())
print "\n"
print "El número introducido es:\t", x
z=senc(x)
print "El seno cociente de x es:\t", z
20
¿Qué pasa si x=0?
"""
Programa para calcular el seno cociente de una magnitud.
z = senc(x), donde x= número real
"""
import numpy as np
# Función seno cociente
def senc(x):
if x==0:
z=1.
else:
z=np.sin(x)/x
return z
Añadimos un bloque
if para evitar la
indeterminación en
x=0.
# Caso particular
x=float(raw_input())
print "\n"
print "El número introducido es:\t", x
z=senc(x)
print "El seno cociente de x es:\t", z
21
¿Y si x es un vector?
"""
Programa para calcular el seno cociente de una magnitud.
z = senc(x), donde x= vector de números reales
"""
import numpy as np
# Función seno cociente
Todos los casos
def senc(x):
están incluidos
z = np.zeros(len(x),)
idx_zero = np.where(x==0)
idx_nonzero = np.where(x!=0)
z[idx_zero] = 1.
z[idx_nonzero] = np.sin(x[idx_nonzero])/x[idx_nonzero]
return z
# Caso particular que introducimos manualmente desde el #
terminal
x=float(raw_input())
print "\n"
print "El número introducido es:\t", x
z=senc(x)
print "El seno cociente de x es:\t", z
22
Dibujemos el resultado
Añadimos el modulo pyplot al comienzo del programa:
import numpy as np
import pylab as pl
Y graficamos el resultado para x=0, 0.1, 0.2, …, 1 insertando este
código al final:
x=np.linspace(0,1,11); z = senc(x);
pl.plot(x,z,'.-r',linewidth=2,markersize=15)
pl.ylabel(r"$\frac{sin(x)}{x}$",fontsize=22)
pl.xlabel(r"$x$",fontsize=20)
pl.title("Seno cociente",
fontsize=24)
23
Dibujemos el resultado
Añadimos el modulo pyplot al comienzo del programa:
import numpy as np
import pylab as pl
Y graficamos el resultado para x=0, 0.1, 0.2, …, 1 insertando este
código al final:
x=np.linspace(0,1,11); z = senc(x);
pl.plot(x,z,'.-r',linewidth=2,markersize=15)
pl.ylabel(r"$\frac{sin(x)}{x}$",fontsize=22)
pl.xlabel(r"$x$",fontsize=20)
pl.title("Seno cociente",
fontsize=24)
24