python científico (introducción a numpy y matplotlib))

32
Python Científico Python-Madrid 14/04/2011

Upload: kikocorreoso

Post on 23-Jun-2015

14.348 views

Category:

Technology


3 download

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

Page 1: Python científico (introducción a numpy y matplotlib))

Python Científico

Python-Madrid14/04/2011

Page 2: Python científico (introducción a numpy y matplotlib))

Cálculo científico

• El científico necesita:

-Obtener datos

-Manipularlos y procesarlos

-Visualizar los resultados (y entenderlos!!!)

Page 3: Python científico (introducción a numpy y matplotlib))

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

Page 4: Python científico (introducción a numpy y matplotlib))

Calculo científico, herramientas

• Numpy• Scipy• Matplotlib• Mayavi• Ipython• Pythonxy• EPD (Enthought python distribution $$)• …

Page 5: Python científico (introducción a numpy y matplotlib))

Calculo científico, herramientas

• Numpy• Scipy• Matplotlib• Mayavi• Ipython• Pythonxy• EPD (Enthought python distribution $$)• …

Page 6: Python científico (introducción a numpy y matplotlib))

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,...

Page 7: Python científico (introducción a numpy y matplotlib))

Numpy

• Operaciones elemento a elemento son la forma de trabajar de numpy por defecto

» Ejemplo

Page 8: Python científico (introducción a numpy y matplotlib))

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’

Page 9: Python científico (introducción a numpy y matplotlib))

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

Page 10: Python científico (introducción a numpy y matplotlib))

Numpy

• Broadcasting, las operaciones son elemento a elemento

Page 11: Python científico (introducción a numpy y matplotlib))

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

Page 12: Python científico (introducción a numpy y matplotlib))

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.

Page 13: Python científico (introducción a numpy y matplotlib))

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,…)

Page 14: Python científico (introducción a numpy y matplotlib))

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)

Page 15: Python científico (introducción a numpy y matplotlib))

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)» …

Page 16: Python científico (introducción a numpy y matplotlib))

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

Page 17: Python científico (introducción a numpy y matplotlib))

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

Page 18: Python científico (introducción a numpy y matplotlib))

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]

Page 19: Python científico (introducción a numpy y matplotlib))

Numpy

• Valores especiales:• NaN, Inf, -Inf

– Y operaciones con/sin ellos » isnan()» isinf()» isfinite()» nan_to_num()» nansum()» nanmax(), nanmin()» nanargmax(), nanargmin()

Page 20: Python científico (introducción a numpy y matplotlib))

Numpy

• Y muchas cosas más que en conjunción con Scipy lo convierten en una herramienta muy poderosa

Page 21: Python científico (introducción a numpy y matplotlib))

Matplotlib

• Permite visualizar datos de forma muy rápida

• Permite obtener gráficas de calidad para publicaciones

Page 22: Python científico (introducción a numpy y matplotlib))

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

Page 23: Python científico (introducción a numpy y matplotlib))

Matplotlib

• El principal submódulo para dibujar es pyplot» import matplotlib.pyplot as plt» # Con pyplot podemos hacer prácticamente todo de

forma sencilla

Page 24: Python científico (introducción a numpy y matplotlib))

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’)

Page 25: Python científico (introducción a numpy y matplotlib))

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)

Page 26: Python científico (introducción a numpy y matplotlib))

Matplotlib

• El principal submódulo para dibujar es pyplot– Marcadores:• Aligual que con los colores, hay muchas formas de

definir los marcadores.

Page 27: Python científico (introducción a numpy y matplotlib))

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’))

Page 28: Python científico (introducción a numpy y matplotlib))

Matplotlib

• Tipos de gráficos:

Page 29: Python científico (introducción a numpy y matplotlib))

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)

Page 30: Python científico (introducción a numpy y matplotlib))

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)

Page 31: Python científico (introducción a numpy y matplotlib))

Matplotlib

• Se puede ampliar:– Basemap (para hacer mapping)– mplot3d (3D)– …