2011-09-19 14 views
8

Desidero stampare un array 2D (circa 1000x1000) con i valori corrispondenti a una scala di colori. Quindi ho usato matplotlib.pcolor, che ha fatto proprio questo, ma per qualche motivo è molto lento quando arriva a quelle dimensioni (come 2 minuti circa solo per tracciare). Qual è la ragione per questo? Converte i valori float in int16 o così aiuto? Ci sono alternative a pcolor?matplotlib.pcolor molto lento. alternative?

from pylab import * 

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

data.txt contiene l'array. Il processo di caricamento richiede alcuni secondi, ma il tempo di calcolo principale è definitivamente utilizzato da ENTRAMBI la funzione pcolor() e show() (circa forse 60-90 secondi ciascuno).

+0

Puoi mostrare qualche codice? – Louis

+4

forse quello che ti serve è pyplot.imshow()? – steabert

+0

sì, funziona molto meglio, grazie mille! – Jakob

risposta

9

imshow sarà molto più veloce. pcolor restituisce un PolyCollection, che sarà piuttosto lento con un milione di elementi, mentre imshow è solo un'immagine.

Si noti che l'indicizzazione in pcolor è leggermente diversa da imshow, anche se potrebbe non essere necessario preoccuparsene a seconda di come è stato utilizzato pcolor. Inoltre, spesso quando si passa da pcolor a imshow si vuole impostare interpolation="nearest" in imshow (ma per immagini così grandi questo potrebbe non avere importanza).

9

Come nota per i futuri googler, c'è anche pcolormesh e pcolorfast.

La documentazione per pcolormesh stabilisce che:

pcolormesh è simile a pcolor(), ma utilizza un meccanismo diverso e restituisce un oggetto diverso; pcolor restituisce una PolyCollection ma pcolormesh restituisce un QuadMesh. È molto più veloce, quindi è quasi uguale a sempre preferito per i grandi array.

imshow dovrebbe essere ancora più veloce, ma è un po 'meno flessibile rispetto ad es. assi non rettilinei.

Vedi this page per un bel confronto tra pcolor, pcolormesh e imshow.

+2

Vedere anche http://matplotlib.org/examples/pylab_examples/pcolor_demo.html per un confronto di base di tutte e quattro le possibilità: pcolor, pcolormesh, imshow e pcolorfast. – kadee