2011-09-19 55 views
8

我想繪製一個二維數組(大約1000x1000)與值對應的色階。所以我使用了matplotlib.pcolor,它做到了這一點,但由於某些原因,它達到這些尺寸時速度很慢(如2分鐘左右)。這是什麼原因?將浮點值轉換爲int16左右幫助?有沒有其他選擇pcolor?matplotlib.pcolor非常慢。備擇方案?

from pylab import * 

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

data.txt包含數組。加載過程需要幾秒鐘,但主要的計算時間肯定是由pcolor()和show()函數使用的(每個函數大概可能需要60-90秒)。

+0

你能出現一些代碼嗎? – Louis

+4

也許你需要的是pyplot.imshow()? – steabert

+0

是的,這工作好多了,非常感謝! – Jakob

回答

9

imshow會快得多。 pcolor返回一個PolyCollection,它會相當慢,有一百萬個元素,而imshow只是一個圖像。

請注意,pcolor中的索引與imshow稍有不同,但您可能不必擔心取決於您使用pcolor的方式。另外,當從pcolor轉到imshow時,通常要在imshow中設置interpolation="nearest"(但對於如此大的圖像,這可能並不重要)。

9

作爲未來谷歌的備註,還有pcolormeshpcolorfast

pcolormesh狀態的文檔的是:

pcolormesh類似於令pColor(),但使用不同的機制和 返回不同的對象; pcolor返回一個PolyCollection,但 pcolormesh返回一個QuadMesh。它速度要快得多,所以對於大型陣列來說,它幾乎是 。

imshow應該更快,但對於例如,非直線軸。

查看this page,在pcolor,pcolormeshimshow之間進行了很好的比較。

+2

另請參閱http://matplotlib.org/examples/pylab_examples/pcolor_demo.html,瞭解所有四種可能性的基本比較:pcolor,pcolormesh,imshow和pcolorfast。 – kadee