2011-09-19 43 views
8

Quiero trazar una matriz 2D (aproximadamente 1000x1000) con los valores correspondientes a una escala de colores. Así que utilicé matplotlib.pcolor, que hizo exactamente eso, pero por alguna razón es super lento cuando llega a esas dimensiones (como 2 minutos más o menos para trazar). ¿Cuál es la razón para eso? ¿Convertiría los valores float a int16 o algo así? ¿Hay alguna alternativa a pcolor?matplotlib.pcolor muy lento. ¿alternativas?

from pylab import * 

data=genfromtxt('data.txt',autostrip=True, case_sensitive=True) 
pcolor(data,cmap='hot') 
colorbar() 
show() 

data.txt contiene la matriz. El proceso de carga toma unos segundos, pero el tiempo de computación principal es utilizado tanto por las funciones pcolor() como show() (aproximadamente 60-90 segundos cada una).

+0

¿Puede mostrar algún código? – Louis

+4

tal vez lo que necesita es pyplot.imshow()? – steabert

+0

sí, eso funciona mucho mejor, ¡muchas gracias! – Jakob

Respuesta

9

imshow será mucho más rápido. pcolor devuelve un PolyCollection, que va a ser bastante lento con un millón de elementos, mientras que imshow es solo una imagen.

Tenga en cuenta que la indexación en pcolor es ligeramente diferente a imshow, aunque es posible que no tenga que preocuparse por eso, dependiendo de cómo haya usado pcolor. Además, a menudo, al pasar de pcolor a imshow, se desea configurar interpolation="nearest" en imshow (pero para imágenes tan grandes, esto puede no importar tampoco).

9

Como nota para futuros googlers, también hay pcolormesh y pcolorfast.

La documentación para pcolormesh estados que:

pcolormesh es similar a pcolor(), pero utiliza un mecanismo diferente y devuelve un objeto diferente; pcolor devuelve un PolyCollection pero pcolormesh devuelve un QuadMesh. Es mucho más rápido, por lo que es casi siempre preferido para arreglos grandes.

imshow debe ser aún más rápido, pero es un poco menos flexible con respecto a, por ejemplo, ejes no rectilíneos.

Ver this page para una buena comparación entre pcolor, pcolormesh y imshow.

+2

Vea también http://matplotlib.org/examples/pylab_examples/pcolor_demo.html para una comparación básica de las cuatro posibilidades: pcolor, pcolormesh, imshow y pcolorfast. – kadee