matplotlib.pcolor很慢。备择方案?

时间:2011-09-19 11:35:55

标签: python numpy matplotlib

我想绘制一个2D数组(大约1000x1000),其值对应于色标。所以我使用了matplotlib.pcolor,它就是这样做的但是由于某种原因,当它达到那些尺寸时(例如2分钟或左右的情节),它是超级慢的。这是什么原因?将float值转换为int16左右有帮助吗? 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秒)。

2 个答案:

答案 0 :(得分:10)

作为未来googlers的备注,还有pcolormeshpcolorfast

pcolormesh的文档指出:

  

pcolormesh类似于pcolor(),但使用不同的机制和   返回一个不同的对象; pcolor返回PolyCollection但是   pcolormesh返回一个QuadMesh。它快得多,所以差不多   总是首选大型阵列。

imshow应该更快,但对于例如非直线轴。

pcolorpcolormeshimshow之间的比较,请参阅this page

答案 1 :(得分:9)

imshow 会快得多。 pcolor返回一个PolyCollection,它会有一百万个元素相当慢,而imshow只是一个图像。

请注意,pcolor中的索引与imshow略有不同,但您可能不需要担心它取决于您使用pcolor的方式。此外,通常当从pcolor转到imshow时,人们想在imshow中设置interpolation="nearest"(但对于如此大的图像,这可能也无关紧要。)