python científico (introducción a numpy y matplotlib))
DESCRIPTION
Charla realizada por Kiko Correoso para las charlas organizadas por Python-Madrid el día 14/04/2011 en las oficinas de Alea soluciones (Madrid)TRANSCRIPT
Python Científico
Python-Madrid14/04/2011
Cálculo científico
• El científico necesita:
-Obtener datos
-Manipularlos y procesarlos
-Visualizar los resultados (y entenderlos!!!)
Cálculo científico, ¿Por qué python?
• Python ya tiene muchos ladrillos para construir la casa (no hay que reinventar)
• Es algo fácil de aprender• Se necesita código eficiente que ejecute rápido• Con un solo lenguaje se puede hacer
prácticamente todo• FLOSS!!!!! (*)
(*) Free/Libre and Open Source Software
Calculo científico, herramientas
• Numpy• Scipy• Matplotlib• Mayavi• Ipython• Pythonxy• EPD (Enthought python distribution $$)• …
Calculo científico, herramientas
• Numpy• Scipy• Matplotlib• Mayavi• Ipython• Pythonxy• EPD (Enthought python distribution $$)• …
Numpy
• Numpy amplía las capacidades de python • Calculadora muy eficiente.• Básicamente, nos permite disponer de un
nuevo contenedor que es un objeto array multidimensional.
• Además dispone de una serie de rutinas que amplían las capacidades permitiendo hacer operaciones rápidas sobre los arrays, reformatearlos, estadística muy básica,...
Numpy
• Operaciones elemento a elemento son la forma de trabajar de numpy por defecto
» Ejemplo
Numpy
• Vectorización, permite no usar bucles, índices,..., de forma explícita (eso sucede entre bambalinas)
– Menos líneas de código– Más fácil de leer– El código se parece más a notación matemática– El código es más ‘pythónico’
Numpy
• Broadcasting, las operaciones son elemento a elemento
– (hay que ver las reglas de broadcasting de numpy con cuidado para entenderlas mejor)
– http://www.scipy.org/EricsBroadcastingDoc
Numpy
• Broadcasting, las operaciones son elemento a elemento
Numpy• Broadcasting, las operaciones son elemento a elemento
» a = arange(10).reshape(2,5)
» b = ones((5))» print a, b, a+b» # Si b = ones((6)) Daría error
» a = arange(10).reshape(10,1)» b = ones((5)).reshape(1,5)» print a, b, a+b» # Si a o b solo tienen una dimensión y mismo número de elementos dará error
Numpy
• Soporta más tipos numéricos que python (bool, int, int8-16-32-64, uint8-16-32-64, float, float8-16-32-64, complex, complex64-128). Los tipos numéricos son instancias de la clase dtype. Para convertir de un tipo de número a otro podemos usar el método .astype() o el tipo como una función. Es preferible usar la primera forma.
Numpy
• Como creamos un array con numpy
– Convirtiéndolo desde otra estructura de python (listas, tuplas,...)
– Funciones numpy (arange, zeros, empty, linspace, random, ogrid, mgrid,...)
– Leyendo desde disco (loadtxt, genfromtxt,…)
Numpy
• Como creamos un array con numpy
– Convirtiéndolo desde otra estructura de python (listas, tuplas,...)» a = [‘1.2’, ‘3.6’]» b = np.array(a).astype(float)» # Si quisiéramos solo la parte entera» c = np.array(a).astype(float).astype(int)
Numpy
• Como creamos un array con numpy
– Funciones numpy (arange, zeros, empty, linspace, random, ogrid, mgrid,...)» a = np.arange(10)» a = np.zeros((3,4), dtype=int)» a = np.linspace(0,10,100)» …
Numpy
• Como creamos un array con numpy
– Leyendo desde disco (loadtxt, genfromtxt,…)
» a = np.loadtxt(‘./datos/hito.050m0’)» a = np.genfromtxt(‘./datos/hito.050m0’)» # genfromtxt es más general, tiene muchas más opciones
de lectura, pero es más lento
Numpy
• Indexing
» x = np.arange(10).reshape(2,5)» x[1][2] = x[1,2]» x[np.array([0,1]), np.array([0,1])]» # Si el índice está fuera de los límites tendremos error
Numpy
• Indexing• Los arrays están ordenados igual que en C, de forma
que el índice último es el que cambia más rápidamente la localización en memoria. En fortran o IDL esto es al contrario.
• Máscaras o indices booleanos» x[x>5]
Numpy
• Valores especiales:• NaN, Inf, -Inf
– Y operaciones con/sin ellos » isnan()» isinf()» isfinite()» nan_to_num()» nansum()» nanmax(), nanmin()» nanargmax(), nanargmin()
Numpy
• Y muchas cosas más que en conjunción con Scipy lo convierten en una herramienta muy poderosa
Matplotlib
• Permite visualizar datos de forma muy rápida
• Permite obtener gráficas de calidad para publicaciones
Matplotlib
• Lo podemos configurar con nuestras preferencias
En linux se puede configurar el usuario, el sistemaEn Win se puede configurar el sistemaSe puede configurar la sesión
>> rcParams
Se puede configurar el script
Matplotlib
• El principal submódulo para dibujar es pyplot» import matplotlib.pyplot as plt» # Con pyplot podemos hacer prácticamente todo de
forma sencilla
Matplotlib
• El principal submódulo para dibujar es pyplot
– Colores:• Se pueden escribir letras que indican colores, nombres
de colores, código hexadecimal se puede usar la keyword color
• plt.plot(x,y, color = ‘blue’)• plt.plot(x,y, ‘b’)• plt.plot(x,y, ‘blue’)• plt.plot(x,y, ‘#FF00FF’)• plt.plot(x,y, color=‘#FF00FF’)
Matplotlib
• El principal submódulo para dibujar es pyplot– Marcadores:• Por supuesto, las líneas y marcadores se pueden
controlar más finamente con keywords:» Plt.plot(x,color=‘b’,linestyle=‘dashdot’,linewidth=4, marker=‘o’,
markerfacecolor=‘red’, markeredgecolor=‘black’, markeredgewidth=4, markersize=12)
Matplotlib
• El principal submódulo para dibujar es pyplot– Marcadores:• Aligual que con los colores, hay muchas formas de
definir los marcadores.
Matplotlib
• El principal submódulo para dibujar es pyplot– Etiquetas para los ejes:• Se controlan mediante xticks e yticks.
» plt.plot(range(5))» plt.xticks(range(5),(‘x1’, ’x2’, ’x3’, ’x4’, ’x5’))
Matplotlib
• Tipos de gráficos:
Matplotlib
• Tipos de gráficos:– Histogramas
» y = np.random.randn(1000)» plt.hist(y, 25)
– Circulares (quesitos)» aficion = [3000,3000,100]» etiquetas = [‘Madrid’,’Barcelona’,’Getafe’]» plt.pie(aficion, labels = etiquetas)
– Scatter (x vs y)» x = arange(1000)» y = np.random.randn(1000)» plt.scatter(x,y)
Matplotlib
• Subplots (varios gráficos en el mismo ‘tapiz’):– Subplot(nºfilas,nºcolumnas,orden)
» plt.subplot(211)» plt.plot(arange(10)» plt.subplot(212)» plt.scatter(arange(0,10,-1)
Matplotlib
• Se puede ampliar:– Basemap (para hacer mapping)– mplot3d (3D)– …
Enlaces y documentaciónhttp://python.g-node.org/python-autumnschool-2010/_media/pythonscientific.pdf
http://docs.scipy.org/doc/numpy/numpy-user.pdf
http://docs.scipy.org/doc/numpy/numpy-ref.pdf
http://docs.scipy.org/doc/scipy/scipy-ref.pdf
http://www.scipy.org/Cookbook
http://matplotlib.sourceforge.net/contents.html
Libro: Matplotlib for python developers (https://www.packtpub.com/matplotlib-python-development/book)