我有一个执行身体大约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可以做到这一点,没问题。)我如何加快速度呢?
答案 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
来检查是否有数字;如果没有,它会创建一个。通过首先手动实例化图形,您不需要完成所有操作。