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 jsayol@imedea.uib-csic.es 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