matplotlib.pcolor运行很慢,有什么替代方案?
我想绘制一个二维数组(大约1000x1000),这个数组的值对应一个颜色范围。所以我用了matplotlib.pcolor,这个方法确实可以做到,但在处理这么大的数组时,速度超级慢(大概需要2分钟才能绘制出来)。这是为什么呢?把浮点数值转换成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 个回答
18
给未来的搜索者一个提示,这里还有pcolormesh
和pcolorfast
这两个东西。
关于pcolormesh
的说明是:
pcolormesh
和pcolor()
很像,但它们的工作方式不同,返回的结果也不一样;pcolor
返回的是一个叫做PolyCollection的对象,而pcolormesh
返回的是QuadMesh。pcolormesh
运行得更快,所以在处理大数组时几乎总是更受欢迎。
imshow
应该会更快,但在处理一些非矩形的坐标轴时灵活性稍差。
想了解pcolor
、pcolormesh
和imshow
之间的区别,可以查看这个页面,里面有很好的对比。
11
imshow
的速度会快很多。pcolor
返回的是一个多边形集合,这在处理一百万个元素时会比较慢,而 imshow
只是显示一张图片。
需要注意的是,pcolor
的索引方式和 imshow
有点不同,不过这可能不需要太担心,具体要看你是怎么使用 pcolor
的。此外,通常在从 pcolor
转到 imshow
时,想要在 imshow
中设置 interpolation="nearest"
(不过对于这么大的图片,这个设置可能也没什么影响)。