Este documento describe las herramientas principales de Python para el cálculo científico, incluyendo Numpy, Scipy, Matplotlib y otras. Numpy amplía las capacidades de procesamiento numérico de Python a través de arrays multidimensionales eficientes. Matplotlib permite la visualización rápida de datos para obtener gráficos de calidad. Juntas, estas herramientas proveen una potente plataforma de código abierto para el análisis numérico y la visualización de datos científicos.
2. Cálculo científico
• El científico necesita:
-Obtener datos
-Manipularlos y procesarlos
-Visualizar los resultados (y entenderlos!!!)
3. 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
6. 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,...
8. 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’
9. 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
11. 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
12. 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.
13. 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,…)
14. 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)
15. 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)
» …
16. 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
17. 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
18. 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]
22. Matplotlib
• Lo podemos configurar con nuestras
preferencias
En linux se puede configurar el usuario, el sistema
En Win se puede configurar el sistema
Se puede configurar la sesión
>> rcParams
Se puede configurar el script
23. Matplotlib
• El principal submódulo para dibujar es pyplot
» import matplotlib.pyplot as plt
» # Con pyplot podemos hacer prácticamente todo de
forma sencilla
24. 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’)
25. 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’, markeredgewid
th=4, markersize=12)
26. Matplotlib
• El principal submódulo para dibujar es pyplot
– Marcadores:
• Aligual que con los colores, hay muchas formas de
definir los marcadores.
27. 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’))