Probando numba: compilador para Python basado en LLVM

Introducción

Hace unos días Travis E. Oliphant, creador de NumPy e importante contribuidor de SciPy entre otras muchas cosas, anunciaba en su Twitter y en su blog la liberación de numba 0.1, un proyecto que pretende ser el mejor compilador orientado a arrays del mundo, como puedes ver en la presentación que dio en la conferencia SciPy 2012 celebrada en Austin, Texas (vídeo y diapositivas).
https://twitter.com/teoliphant/status/235789560678858752
Aunque el proyecto está en una fase bastante precaria todavía y hay unos cuantos fallos pendientes de solucionar todavía, hemos hecho algunas pruebas y los resultados son impresionantes. Vamos a hablar un poco de numba y a explicar cómo puedes probarlo tú mismo.
Leer más »Probando numba: compilador para Python basado en LLVM

Cómo leer y escribir datos en archivos con NumPy

Introducción

Hoy vamos a ver rápidamente cómo leer datos desde un archivo con NumPy y también cómo escribirlos. Es algo a lo que tendremos que recurrir con mucha frecuencia, ya sea porque hemos recogido nuestros datos de un experimento y los tenemos almacenados en un fichero de texto, porque los hemos recibido por otras fuentes o porque queremos separar lo que es la lógica del programa de los datos con los que opera.
Ya comentamos hace tiempo cómo crear matrices en Python a partir de listas, utilizando rangos numéricos, etc. Lo bueno que tienen las funciones de NumPy que nos ayudan a desempeñar estas tareas es que no tenemos que preocuparnos por el manejo de ficheros con Python, así que leer o escribir será tan fácil como invocar una función.
En esta entrada se ha usado python 2.7.3 y numpy 1.6.2 y es compatible con python 3.2.3

Lectura

NumPy nos ofrece varias funciones para cargar datos en forma matricial, pero la que usaremos con más frecuencia es la función loadtxt. Su único argumento obligatorio es un nombre de archivo o un objeto file desde el que leer los datos.
Leer más »Cómo leer y escribir datos en archivos con NumPy

Manual de introducción a matplotlib.pyplot (VII): Tipos de gráfico (IV)

Esto pretende ser un tutorial del módulo pyplot de la librería matplotlib. El tutorial lo dividiremos de la siguiente forma (que podrá ir cambiando a medida que vayamos avanzando).

  1. Primeros pasos
  2. Creando ventanas, manejando ventanas y configurando la sesión
  3. Configuración del gráfico
  4. Tipos de gráfico I
  5. Tipos de gráfico II
  6. Tipos de gráfico III
  7. Tipos de gráfico IV
  8. Texto y anotaciones (arrow, annotate, table, text…)
  9. Herramientas estadísticas (acorr, cohere, csd, psd, specgram, spy, xcorr, …)
  10. Eventos e interactividad (connect, disconnect, ginput, waitforbuttonpress…)
  11. Miscelánea

[Para este tutorial se ha usado python 2.7.1, ipython 0.11, numpy 1.6.1, matplotlib 1.1.0, netcdf4-python 0.9.9 y Basemap 1.0.2]
[DISCLAIMER: Muchos de los gráficos que vamos a representar no tienen ningún sentido físico y los resultados solo pretenden mostrar el uso de la librería].
En todo momento supondremos que se ha iniciado la sesión y se ha hecho
[sourcecode language=”python”]
import matplotlib.pyplot as plt
import numpy as np
import netCDF4 as nc
from mpl_toolkits.basemap import Basemap as Bm
[/sourcecode]
Hasta ahora hemos visto como configurar las ventanas, manejo de las mismas, definir áreas de gráfico, algunos tipos de gráficos… Ahora vamos a ver un último capítulo sobre tipos de gráficos. En esta última entrada sobre los tipos de gráfico hemos metido gráficos que quizá no estén muy relacionados entre sí por lo que quizá este capítulo puede parecer un poco cajón desastre.
Leer más »Manual de introducción a matplotlib.pyplot (VII): Tipos de gráfico (IV)

Introducción a IPython: mucho más que un intérprete de Python

Introducción

Hoy ha llegado el momento de hablar de IPython, aprovechando que acaba de salir la versión 0.13 después de 6 meses de duro trabajo. IPython es un intérprete de Python con unas cuantas características avanzadas que hemos usado desde que empezamos a escribir en el blog y que, sinceramente, si no conoces todavía no sé a qué estás esperando 😛
Decir que IPython es solo un intérprete de Python es, no obstante, quedarse muy corto. Actualmente multitud de paquetes utilizan IPython como biblioteca o como intérprete interactivo, siendo el ejemplo más notable el proyecto Sage. IPython es multiplataforma, es software libre, tiene una enorme comunidad detrás, un desarrollo constante y bien organizado y es extremadamente potente. ¿Qué más se le puede pedir? 🙂

Captura de la interfaz web (notebook) de IPython, extraída de su web http://ipython.org/ipython-doc/rel-0.13/whatsnew/version0.13.html © Copyright 2008, The IPython Development Team

Breve historia

IPython comenzó en 2001 de la mano de Fernando Pérez, investigador colombiano, cuando completaba su tesis sobre Física de partículas en la Universidad de Colorado. Pérez utilizaba mucho los notebooks de Mathematica, y el intérprete de Python le parecía «un juguete» en comparación[1]. A partir de su propio trabajo y de otros dos proyectos, LazyPython e IPP, surgió lo que años después conocemos por IPython[2].
Lo importante para nosotros de este programa es que nació en un ámbito científico y de la mano de investigadores, pues, como el propio Fernando Pérez hizo notar, el flujo de trabajo en este tipo de ámbitos demanda un entorno interactivo. Ahí tenemos a MATLAB, Maple y Mathematica.
Leer más »Introducción a IPython: mucho más que un intérprete de Python

Manual de introducción a matplotlib.pyplot (VI): Tipos de gráfico (III)

Esto pretende ser un tutorial del módulo pyplot de la librería matplotlib. El tutorial lo dividiremos de la siguiente forma (que podrá ir cambiando a medida que vayamos avanzando).

  1. Primeros pasos
  2. Creando ventanas, manejando ventanas y configurando la sesión
  3. Configuración del gráfico
  4. Tipos de gráfico I
  5. Tipos de gráfico II
  6. Tipos de gráfico III
  7. Tipos de gráfico IV
  8. Texto y anotaciones (arrow, annotate, table, text…)
  9. Herramientas estadísticas (acorr, cohere, csd, psd, specgram, spy, xcorr, …)
  10. Eventos e interactividad (connect, disconnect, ginput, waitforbuttonpress…)
  11. Miscelánea

[Para este tutorial se ha usado python 2.7.1, ipython 0.11, numpy 1.6.1 y matplotlib 1.1.0]
[DISCLAIMER: Muchos de los gráficos que vamos a representar no tienen ningún sentido físico y los resultados solo pretenden mostrar el uso de la librería].
En todo momento supondremos que se ha iniciado la sesión y se ha hecho
[sourcecode language=”python”]
import matplotlib.pyplot as plt
import numpy as np
[/sourcecode]
Hasta ahora hemos visto como configurar las ventanas, manejo de las mismas, definir áreas de gráfico, algunos tipos de gráficos… Ahora vamos a continuar viendo tipos de gráficos disponibles desde matplotlib.pyplot. En este caso nos vamos a centrar en otros gráficos que, quizá, sean menos usados que los vistos hasta ahora. Algunos ya los hemos visto en otras entradas, como gráficos polares, gráficos de contornos [1] [2],…
Vamos a empezar por ver un gráfico tipo tarta de quesitos o tipo tarta o como lo queráis traducir (en inglés se llama pie chart). Estos sos los típicos gráficos que ponen en los periódicos con los resultados de elecciones o cosas así. En este caso vamos a ver un ejemplo real a partir de los datos de las visitas por países a este humilde blog:
[sourcecode language=”python”]
plt.ion() # Ponemos el modo interactivo
visitas = [43.97, 9.70, 7.42, 6.68, 3.91, 3.85, 3.62, 3.43, 3.16, 3.04] # Definimos un vector con el % de visitas del top ten de países
visitas = np.append(visitas, 100. – np.sum(visitas)) # Introducimos un último elemento que recoge el % de visitas de otros países fuera del top ten
paises = [u’España’, u’México’, ‘Chile’, ‘Argentina’, ‘Colombia’, ‘Ecuador’, u’Perú’, ‘USA’, ‘Islandia’, ‘Venezuela’, ‘Otros’] # Etiquetas para los quesitos
explode = [0, 0, 0, 0, 0, 0, 0, 0.2, 0.2, 0, 0] # Esto nos ayudará a destacar algunos quesitos
plt.pie(visitas, labels = paises, explode = explode) # Dibuja un gráfico de quesitos
plt.title(u’Porcentaje de visitas por país’)
[/sourcecode]
El resultado se puede ver en el gráfico siguiente. Como habréis adivinado, explode sirve para separar quesitos del centro de la tarta. En este caso hemos separado los quesitos de USA e Islandia para destacar los países no hispanohablantes:

Leer más »Manual de introducción a matplotlib.pyplot (VI): Tipos de gráfico (III)

Python en Windows: «¡Hola mundo!» en 7 minutos

Cómo instalar Python en Windows

En lugar de escribir un tutorial para todos, este asume dos cosas:

  • Eres un usuario de Windows curioso acerca de la programación, y
  • Te gustaría instalar el lenguaje de programación Python en tu ordenador con Windows, lanzar el intérprete de Python y ejecutar el clásico programa «¡Hola mundo!».

Si tienes preguntas del tipo «¿Qué es Python y por qué debería instalarlo en mi ordenador con Windows?» lee el principio de Introducción a Python para científicos e ingenieros. Y si quieres instalar Python, vuelve.
¿Ya estás de vuelta? ¿No te habías ido? Vale. Seguimos.
De la web oficial de Python podemos descargar directamente un sencillo instalador para poder utilizar Python en Windows.
¿Listo? Suponiendo que tienes una conexión de banda ancha, ya te quedan menos de siete minutos para tener Python instalado en tu ordenador y escribir tu primer comando en el intérprete. ¡Vamos!
Leer más »Python en Windows: «¡Hola mundo!» en 7 minutos

Manual de introducción a matplotlib.pyplot (V): Tipos de gráfico (II)

Esto pretende ser un tutorial del módulo pyplot de la librería matplotlib. El tutorial lo dividiremos de la siguiente forma (que podrá ir cambiando a medida que vayamos avanzando).

  1. Primeros pasos
  2. Creando ventanas, manejando ventanas y configurando la sesión
  3. Configuración del gráfico
  4. Tipos de gráfico I
  5. Tipos de gráfico II
  6. Tipos de gráfico III
  7. Tipos de gráfico IV
  8. Texto y anotaciones (arrow, annotate, table, text…)
  9. Herramientas estadísticas (acorr, cohere, csd, psd, specgram, spy, xcorr, …)
  10. Eventos e interactividad (connect, disconnect, ginput, waitforbuttonpress…)
  11. Miscelánea

[Para este tutorial se ha usado python 2.7.1, ipython 0.11, numpy 1.6.1 y matplotlib 1.1.0]
[DISCLAIMER: Muchos de los gráficos que vamos a representar no tienen ningún sentido físico y los resultados solo pretenden mostrar el uso de la librería].
En todo momento supondremos que se ha iniciado la sesión y se ha hecho
[sourcecode language=”python”]
import matplotlib.pyplot as plt
import numpy as np
[/sourcecode]
Hasta ahora hemos visto como configurar las ventanas, manejo de las mismas, definir áreas de gráfico, algunos tipos de gráficos… Ahora vamos a continuar viendo tipos de gráficos disponibles desde matplotlib.pyplot. En este caso nos vamos a centrar en los gráficos de barras.
Para dibujar un histograma podemos hacer uso de plt.hist. Un histograma suele ser un gráfico de barras donde se representa la ocurrencia de datos (frecuencia) en intervalos definidos. Lo que hace plt.hist es dibujar el histograma de un vector en función del número de intervalos (bins) que definamos. Como siempre, vamos a ver esto con un ejemplo:
[sourcecode language=”python”]
plt.ion() # Ponemos el modo interactivo
x = np.random.randn(10000) # Definimos un vector de números aleatorios de una distribución normal
plt.hist(x, bins = 20) # Dibuja un histograma dividiendo el vector x en 20 intervalos del mismo ancho
[/sourcecode]
El resultado sería el siguiente, donde se representa el cálculo que haría la función np.histogram gráficamente y en un solo paso:

Podéis jugar también con np.histogram2d, np.histogramdd y np. bincount
Si en lugar de dibujar histogramas queremos dibujar gráficos de barras para representar, que se yo, la evolución de la prima de riesgo en los últimos días podemos usar plt.barLeer más »Manual de introducción a matplotlib.pyplot (V): Tipos de gráfico (II)

Presentando Astropy: herramientas básicas para Astronomía y Astrofísica en Python

Ayer se liberó Astropy 0.1, la primera versión de este paquete Python que aspira a unificar las herramientas y utilidades básicas necesarias en astronomía y astrofísica. Puedes leer el anuncio en la lista de correo de Astropy. El lenguaje Python está teniendo bastante impulso en ámbitos científicos durante los últimos… Leer más »Presentando Astropy: herramientas básicas para Astronomía y Astrofísica en Python

Cómo crear matrices en Python con NumPy

Introducción

En este breve apunte vamos a ver cómo crear matrices en Python usando la biblioteca NumPy. Para ello, vamos a hacer un repaso rápido de los métodos que ofrece NumPy para crear arrays y matrices.
Si buscas por Internet encontrarás varias recetas de cómo crear una matriz en Python utilizando listas, es decir, haciendo uso solamente de la biblioteca estándar. Sin embargo, aquí asumimos que vamos a emplear la matriz básicamente para hacer cálculos matemáticos con ella, y por otro lado en nuestro caso no supone un problema añadir NumPy como dependencia porque por unas razones o por otras lo íbamos a necesitar 😉
Esta entrada es básicamente una recopilación de los métodos listados en la documentación de NumPy. Otro día veremosEn este artículo en nuestro blog puedes leer cómo construir arrays a partir de ficheros externos.
Editado el 13 de junio de 2012: Añadidas funciones para crear arrays de NumPy a partir de listas y una nota sobre el peligro de la función empty.
En esta entrada se ha usado python 2.7.3 y numpy 1.6.1 y es compatible con python 3.2.3

Arrays vacíos, unos y ceros

Con estas funciones podemos crear una matriz en Python cuando conocemos el tamaño pero no conocemos los datos que va a contener, o cuando por cualquier motivo queremos matrices llenas de unos o de ceros. Para ello utilizaremos las funciones empty, zeros y ones, que aceptan como argumento una tupla con las dimensiones del array:
[sourcecode language=”python”]
In [1]: import numpy as np
In [2]: np.empty((2, 3)) # Matriz vacía, con valores residuales de la memoria
Out[2]:
array([[ 0.00000000e+000, 1.19528827e-316, 6.94132801e-310],
[ 1.41077362e-316, 6.94132772e-310, 6.94132772e-310]])
In [3]: np.zeros((3, 1)) # Matriz de ceros
Out[3]:
array([[ 0.],
[ 0.],
[ 0.]])
In [4]: np.ones((3, 2)) # Matriz de unos
Out[4]:
array([[ 1., 1.],
[ 1., 1.],
[ 1., 1.]])
[/sourcecode]
Leer más »Cómo crear matrices en Python con NumPy