我想绘制一个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秒)。
答案 0 :(得分:10)
作为未来googlers的备注,还有pcolormesh
和pcolorfast
。
pcolormesh
的文档指出:
pcolormesh类似于pcolor(),但使用不同的机制和 返回一个不同的对象; pcolor返回PolyCollection但是 pcolormesh返回一个QuadMesh。它快得多,所以差不多 总是首选大型阵列。
imshow
应该更快,但对于例如非直线轴。
有pcolor
,pcolormesh
和imshow
之间的比较,请参阅this page。
答案 1 :(得分:9)
imshow
会快得多。 pcolor
返回一个PolyCollection,它会有一百万个元素相当慢,而imshow只是一个图像。
请注意,pcolor中的索引与imshow略有不同,但您可能不需要担心它取决于您使用pcolor的方式。此外,通常当从pcolor转到imshow时,人们想在imshow中设置interpolation="nearest"
(但对于如此大的图像,这可能也无关紧要。)