2011-09-19 24 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