pyplot:创建热图真的很慢

时间:2010-06-04 05:14:15

标签: python matplotlib

我有一个执行身体大约200次的循环。在每次循环迭代中,它进行复杂的计算,然后作为调试,我希望生成NxM矩阵的热图。但是,生成这个热图是无法忍受的缓慢,并且显着减慢了已经很慢的算法。

我的代码是:

import numpy
import matplotlib.pyplot as plt
for i in range(200):
    matrix = complex_calculation()
    plt.set_cmap("gray")
    plt.imshow(matrix)
    plt.savefig("frame{0}.png".format(i))

矩阵,从numpy,并不是巨大的--- 300 x 600的双打。即使我不保存数字而是更新屏幕上的情节,它甚至更慢。

当然,我必须滥用pyplot。 (Matlab可以做到这一点,没问题。)我如何加快速度呢?

2 个答案:

答案 0 :(得分:5)

尝试在循环中放置plt.clf()以清除当前数字:

for i in range(200):
    matrix = complex_calculation()
    plt.set_cmap("gray")
    plt.imshow(matrix)
    plt.savefig("frame{0}.png".format(i))
    plt.clf()

如果你不这样做,那么当机器努力为这个数字分配越来越多的内存时,循环就会变慢。

答案 1 :(得分:3)

我认为这有点快:

import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.add_axes([0.1,0.1,0.8,0.8])
for i in range(200):
    matrix = complex_calculation()
    ax.imshow(matrix, cmap=cm.gray)
    fig.savefig("frame{0}.png".format(i))

plt.imshow调用gca,调用gcf来检查是否有数字;如果没有,它会创建一个。通过首先手动实例化图形,您不需要完成所有操作。