per*_*iae 10 python matplotlib
我想通过调用imshowfor循环来显示一个简单的动画.这是我的问题的演示:
import pylab,time
images = [pylab.uniform(0,255,(50,50)) for _ in xrange(40)]
pylab.ion()
timings = []
for img in images:
tic = time.time()
pylab.imshow(img)
pylab.draw()
toc = time.time()
timings.append(toc-tic)
pylab.clf()
pylab.plot(timings)
pylab.title('elapsed time per iteration')
pylab.ioff()
pylab.show()
Run Code Online (Sandbox Code Playgroud)
请注意,我在运行循环之前生成图像,并且我唯一的部分是imshow和draw函数.我得到的结果如下:

我怎样才能避免这种放缓?
Joe*_*ton 14
事情正在变慢,因为你每次都会添加越来越多的图像并将它们全部绘制出来.
1)清除每个图像之间的图(在您的情况下,pylab.cla()或者更好)2)不要创建新图像,只需将现有图像的数据设置为新数据.
作为使用的一个例子cla():
import matplotlib.pyplot as plt
import numpy as np
images = np.random.uniform(0, 255, size=(40, 50, 50))
fig, ax = plt.subplots()
fig.show()
for image in images:
ax.imshow(image)
fig.canvas.draw()
ax.cla()
Run Code Online (Sandbox Code Playgroud)
并且仅作为设置数据的示例:
import matplotlib.pyplot as plt
import numpy as np
images = np.random.uniform(0, 255, size=(40, 50, 50))
fig, ax = plt.subplots()
im = ax.imshow(images[0])
fig.show()
for image in images[1:]:
im.set_data(image)
fig.canvas.draw()
Run Code Online (Sandbox Code Playgroud)
你会注意到第二种方法要快得多.