Python CientíficoPython-Madrid14/04/2011
Cálculo científicoEl 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 aprenderSe necesita código eficiente que ejecute rápidoCon un solo lenguaje se puede hacer prácticamente todoFLOSS!!!!! (*)(*) Free/Libre  and Open Source Software
Calculo científico, herramientasNumpyScipyMatplotlibMayaviIpythonPythonxyEPD (Enthoughtpythondistribution $$)…
Calculo científico, herramientasNumpyScipyMatplotlibMayaviIpythonPythonxyEPD (Enthoughtpythondistribution $$)…
NumpyNumpy amplía las capacidades de pythonCalculadora 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,...
NumpyOperaciones elemento a elemento son la forma de trabajar de numpy por defectoEjemplo
NumpyVectorización, permite no usar bucles, índices,..., de forma explícita (eso sucede entre bambalinas)Menos líneas de códigoMás fácil de leerEl código se parece más a notación matemáticaEl código es más ‘pythónico’
NumpyBroadcasting, 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
NumpyBroadcasting, las operaciones son elemento a elemento
NumpyBroadcasting, las operaciones son elemento a elementoa = arange(10).reshape(2,5)b = ones((5))print a, b, a+b# Si b = ones((6)) Daría errora = 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
NumpySoporta 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.
NumpyComo creamos un array con numpyConvirtiéndolo desde otra estructura de python (listas, tuplas,...)Funciones numpy (arange, zeros, empty, linspace, random, ogrid, mgrid,...)Leyendo desde disco (loadtxt, genfromtxt,…)
NumpyComo creamos un array con numpyConvirtié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 enterac = np.array(a).astype(float).astype(int)
NumpyComo creamos un array con numpyFunciones 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)…
NumpyComo creamos un array con numpyLeyendo 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
NumpyIndexingx = 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
NumpyIndexingLos 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 booleanosx[x>5]
NumpyValores especiales:NaN, Inf, -InfY operaciones con/sin ellos isnan()isinf()isfinite()nan_to_num()nansum()nanmax(), nanmin()nanargmax(), nanargmin()
NumpyY muchas cosas más que en conjunción con Scipy lo convierten en una herramienta muy poderosa
MatplotlibPermite visualizar datos de forma muy rápidaPermite obtener gráficas de calidad para publicaciones
MatplotlibLo podemos configurar con nuestras preferenciasEn linux se puede configurar el usuario, el sistemaEn Win se puede configurar el sistemaSe puede configurar la sesión>> rcParamsSe puede configurar el script
MatplotlibEl principal submódulo para dibujar es pyplotimportmatplotlib.pyplot as plt# Con pyplot podemos hacer prácticamente todo de forma sencilla
MatplotlibEl principal submódulo para dibujar es pyplotColores:Se pueden escribir letras que indican colores, nombres de colores, código hexadecimal se puede usar la keywordcolorplt.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’)
MatplotlibEl principal submódulo para dibujar es pyplotMarcadores: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)
MatplotlibEl principal submódulo para dibujar es pyplotMarcadores:Aligual que con los colores, hay muchas formas de definir los marcadores.
MatplotlibEl principal submódulo para dibujar es pyplotEtiquetas para los ejes:Se controlan mediante xticks e yticks.plt.plot(range(5))plt.xticks(range(5),(‘x1’, ’x2’, ’x3’, ’x4’, ’x5’))
MatplotlibTipos de gráficos:
MatplotlibTipos de gráficos:Histogramasy = 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)
MatplotlibSubplots (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)
MatplotlibSe puede ampliar:Basemap (para hacer mapping)mplot3d (3D)…
Enlaces y documentaciónhttp://python.g-node.org/python-autumnschool-2010/_media/pythonscientific.pdfhttp://docs.scipy.org/doc/numpy/numpy-user.pdfhttp://docs.scipy.org/doc/numpy/numpy-ref.pdfhttp://docs.scipy.org/doc/scipy/scipy-ref.pdfhttp://www.scipy.org/Cookbookhttp://matplotlib.sourceforge.net/contents.htmlLibro: Matplotlibforpythondevelopers (https://www.packtpub.com/matplotlib-python-development/book)

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