Creando una animación con matplotlib y ffmpeg

En esta nueva entrada vamos a ver una revisión rápida al módulo animation en matplotlib, disponible desde la versión 1.1 de matplotlib.

[Para esta entrada se ha usado matplotlib 1.1.1, numpy 1.6.1, ipython 0.13 sobre python 2.7.3 y ffmpeg como librería externa que usará matplotlib para crear el video de la animación (aunque también puede usar mencoder)] todo ello corriendo en linux. Puede que los usuarios de windows tengan problemas al guardar el video si ffmpeg no está instalado y/o correctamente configurado para que matplotlib pueda trabajar con ffmpeg.

Hay varias formas de hacer una animación usando FuncAnimation, ArtistAnimation y/o TimedAnimation. Las dos primeras formas son clases que heredan de la tercera mientras que la tercera hereda de la clase base Animation.

Para este ejemplo de como hacer una animación con matplotlib y ffmpeg vamos a usar FuncAnimation y vamos a representar la evolución de un atractor de Lorenz en 3D.

Continue reading

Trabajando con recarray

En el artículo de hoy vamos a ver el uso de numpy.recarray (o arrays estructurados) y las posibilidades que tiene usar record arrays, que no son más que arrays numpy a los que se puede acceder usando atributos y donde podemos usar diferente tipo de dato (int, float, string,...) en cada uno de los campos como si fuera una tabla de una hoja de cálculo.

[En esta entrada se ha usado numpy 1.6, ipython 0.13 sobre python 2.7]

Primero de todo importamos lo necesario:

import numpy as np

Creamos una serie de vectores que serán los que usaremos a posteriori para 'poblar' nuestro recarray.

persona = ['juanlu', 'dapid',
           'kiko', 'eugenia',
           'fernando', 'maria',
           'lorena', 'angel',
            'tomas', 'susana']
sexo = ['v', 'v', 'v', 'm', 'v', ## 'v' para varon y 'm' para mujer
        'm', 'm', 'v', 'v', 'm']
altura = [185, 170, 175, 168, 183, 159, 152, 191, 179, 178]

Ahora imaginad que queremos esos tres vectores de datos en un array y queremos conservar el tipo de dato de cada vector (string para persona, string para sexo y entero para la altura en centímetros) y queremos 'titular' cada uno de esos vectores en nuestro nuevo array y queremos acceder a cada uno de esos vectores mediante un atributo. Esto lo podremos hacer de varias maneras creando un recarray:

Continue reading