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

20,536 views

Published on

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)

Published in: Technology
1 Comment
9 Likes
Statistics
Notes
  • Por favor, si alguien ve algo que considera erróneo en la presentación, que avise por aquí para poder mejorar el documento. Gracias.
    Saludos.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total views
20,536
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
287
Comments
1
Likes
9
Embeds 0
No embeds

No notes for slide

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

  1. 1. Python Científico<br />Python-Madrid<br />14/04/2011<br />
  2. 2. Cálculo científico<br />El científico necesita: <br /> -Obtener datos<br /> -Manipularlos y procesarlos<br /> -Visualizar los resultados (y entenderlos!!!)<br />
  3. 3. Cálculo científico, ¿Por qué python?<br />Python ya tiene muchos ladrillos para construir la casa (no hay que reinventar)<br />Es algo fácil de aprender<br />Se necesita código eficiente que ejecute rápido<br />Con un solo lenguaje se puede hacer prácticamente todo<br />FLOSS!!!!! (*)<br />(*) Free/Libre and Open Source Software<br />
  4. 4. Calculo científico, herramientas<br />Numpy<br />Scipy<br />Matplotlib<br />Mayavi<br />Ipython<br />Pythonxy<br />EPD (Enthoughtpythondistribution $$)<br />…<br />
  5. 5. Calculo científico, herramientas<br />Numpy<br />Scipy<br />Matplotlib<br />Mayavi<br />Ipython<br />Pythonxy<br />EPD (Enthoughtpythondistribution $$)<br />…<br />
  6. 6. Numpy<br />Numpy amplía las capacidades de python<br />Calculadora muy eficiente.<br />Básicamente, nos permite disponer de un nuevo contenedor que es un objeto array multidimensional.<br />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,...<br />
  7. 7. Numpy<br />Operaciones elemento a elemento son la forma de trabajar de numpy por defecto<br />Ejemplo<br />
  8. 8. Numpy<br />Vectorización, permite no usar bucles, índices,..., de forma explícita (eso sucede entre bambalinas)<br />Menos líneas de código<br />Más fácil de leer<br />El código se parece más a notación matemática<br />El código es más ‘pythónico’<br />
  9. 9. Numpy<br />Broadcasting, las operaciones son elemento a elemento<br />(hay que ver las reglas de broadcasting de numpy con cuidado para entenderlas mejor)<br />http://www.scipy.org/EricsBroadcastingDoc<br />
  10. 10. Numpy<br />Broadcasting, las operaciones son elemento a elemento<br />
  11. 11. Numpy<br />Broadcasting, las operaciones son elemento a elemento<br />a = arange(10).reshape(2,5)<br />b = ones((5))<br />print a, b, a+b<br /># Si b = ones((6)) Daría error<br />a = arange(10).reshape(10,1)<br />b = ones((5)).reshape(1,5)<br />print a, b, a+b<br /># Si a o b solo tienen una dimensión y mismo número de elementos dará error<br />
  12. 12. Numpy<br />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.<br />
  13. 13. Numpy<br />Como creamos un array con numpy<br />Convirtiéndolo desde otra estructura de python (listas, tuplas,...)<br />Funciones numpy (arange, zeros, empty, linspace, random, ogrid, mgrid,...)<br />Leyendo desde disco (loadtxt, genfromtxt,…)<br />
  14. 14. Numpy<br />Como creamos un array con numpy<br />Convirtiéndolo desde otra estructura de python (listas, tuplas,...)<br />a = [‘1.2’, ‘3.6’]<br />b = np.array(a).astype(float)<br /># Si quisiéramos solo la parte entera<br />c = np.array(a).astype(float).astype(int)<br />
  15. 15. Numpy<br />Como creamos un array con numpy<br />Funciones numpy (arange, zeros, empty, linspace, random, ogrid, mgrid,...)<br />a = np.arange(10)<br />a = np.zeros((3,4), dtype=int)<br />a = np.linspace(0,10,100)<br />…<br />
  16. 16. Numpy<br />Como creamos un array con numpy<br />Leyendo desde disco (loadtxt, genfromtxt,…)<br />a = np.loadtxt(‘./datos/hito.050m0’)<br />a = np.genfromtxt(‘./datos/hito.050m0’)<br /># genfromtxt es más general, tiene muchas más opciones de lectura, pero es más lento<br />
  17. 17. Numpy<br />Indexing<br />x = np.arange(10).reshape(2,5)<br />x[1][2] = x[1,2]<br />x[np.array([0,1]), np.array([0,1])]<br /># Si el índice está fuera de los límites tendremos error<br />
  18. 18. Numpy<br />Indexing<br />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.<br />Máscaras o indices booleanos<br />x[x>5]<br />
  19. 19. Numpy<br />Valores especiales:<br />NaN, Inf, -Inf<br />Y operaciones con/sin ellos <br />isnan()<br />isinf()<br />isfinite()<br />nan_to_num()<br />nansum()<br />nanmax(), nanmin()<br />nanargmax(), nanargmin()<br />
  20. 20. Numpy<br />Y muchas cosas más que en conjunción con Scipy lo convierten en una herramienta muy poderosa<br />
  21. 21. Matplotlib<br />Permite visualizar datos de forma muy rápida<br />Permite obtener gráficas de calidad para publicaciones<br />
  22. 22. Matplotlib<br />Lo podemos configurar con nuestras preferencias<br />En linux se puede configurar el usuario, el sistema<br />En Win se puede configurar el sistema<br />Se puede configurar la sesión<br />>> rcParams<br />Se puede configurar el script<br />
  23. 23. Matplotlib<br />El principal submódulo para dibujar es pyplot<br />importmatplotlib.pyplot as plt<br /># Con pyplot podemos hacer prácticamente todo de forma sencilla<br />
  24. 24. Matplotlib<br />El principal submódulo para dibujar es pyplot<br />Colores:<br />Se pueden escribir letras que indican colores, nombres de colores, código hexadecimal se puede usar la keywordcolor<br />plt.plot(x,y, color = ‘blue’)<br />plt.plot(x,y, ‘b’)<br />plt.plot(x,y, ‘blue’)<br />plt.plot(x,y, ‘#FF00FF’)<br />plt.plot(x,y, color=‘#FF00FF’)<br />
  25. 25. Matplotlib<br />El principal submódulo para dibujar es pyplot<br />Marcadores:<br />Por supuesto, las líneas y marcadores se pueden controlar más finamente con keywords:<br />Plt.plot(x,color=‘b’,linestyle=‘dashdot’,linewidth=4, marker=‘o’, markerfacecolor=‘red’, markeredgecolor=‘black’, markeredgewidth=4, markersize=12)<br />
  26. 26. Matplotlib<br />El principal submódulo para dibujar es pyplot<br />Marcadores:<br />Aligual que con los colores, hay muchas formas de definir los marcadores.<br />
  27. 27. Matplotlib<br />El principal submódulo para dibujar es pyplot<br />Etiquetas para los ejes:<br />Se controlan mediante xticks e yticks.<br />plt.plot(range(5))<br />plt.xticks(range(5),(‘x1’, ’x2’, ’x3’, ’x4’, ’x5’))<br />
  28. 28. Matplotlib<br />Tipos de gráficos:<br />
  29. 29. Matplotlib<br />Tipos de gráficos:<br />Histogramas<br />y = np.random.randn(1000)<br />plt.hist(y, 25)<br />Circulares (quesitos)<br />aficion = [3000,3000,100]<br />etiquetas = [‘Madrid’,’Barcelona’,’Getafe’]<br />plt.pie(aficion, labels = etiquetas)<br />Scatter (x vs y)<br />x = arange(1000)<br />y = np.random.randn(1000)<br />plt.scatter(x,y)<br />
  30. 30. Matplotlib<br />Subplots (varios gráficos en el mismo ‘tapiz’):<br />Subplot(nºfilas,nºcolumnas,orden)<br />plt.subplot(211)<br />plt.plot(arange(10)<br />plt.subplot(212)<br />plt.scatter(arange(0,10,-1)<br />
  31. 31. Matplotlib<br />Se puede ampliar:<br />Basemap (para hacer mapping)<br />mplot3d (3D)<br />…<br />
  32. 32. Enlaces y documentación<br />http://python.g-node.org/python-autumnschool-2010/_media/pythonscientific.pdf<br />http://docs.scipy.org/doc/numpy/numpy-user.pdf<br />http://docs.scipy.org/doc/numpy/numpy-ref.pdf<br />http://docs.scipy.org/doc/scipy/scipy-ref.pdf<br />http://www.scipy.org/Cookbook<br />http://matplotlib.sourceforge.net/contents.html<br />Libro: Matplotlibforpythondevelopers (https://www.packtpub.com/matplotlib-python-development/book)<br />

×