matplotlib.pcolor运行很慢,有什么替代方案?

9 投票
2 回答
10288 浏览
提问于 2025-04-17 02:35

我想绘制一个二维数组(大约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

给未来的搜索者一个提示,这里还有pcolormeshpcolorfast这两个东西。

关于pcolormesh的说明是:

pcolormeshpcolor()很像,但它们的工作方式不同,返回的结果也不一样;pcolor返回的是一个叫做PolyCollection的对象,而pcolormesh返回的是QuadMesh。pcolormesh运行得更快,所以在处理大数组时几乎总是更受欢迎。

imshow应该会更快,但在处理一些非矩形的坐标轴时灵活性稍差。

想了解pcolorpcolormeshimshow之间的区别,可以查看这个页面,里面有很好的对比。

11

imshow 的速度会快很多。pcolor 返回的是一个多边形集合,这在处理一百万个元素时会比较慢,而 imshow 只是显示一张图片。

需要注意的是,pcolor 的索引方式和 imshow 有点不同,不过这可能不需要太担心,具体要看你是怎么使用 pcolor 的。此外,通常在从 pcolor 转到 imshow 时,想要在 imshow 中设置 interpolation="nearest"(不过对于这么大的图片,这个设置可能也没什么影响)。

撰写回答