Python 为什么每次更新我的pylab动画都会变慢?

Python 为什么每次更新我的pylab动画都会变慢?,python,matplotlib,Python,Matplotlib,我想通过在for循环中调用imshow来显示一个简单的动画。下面是我的问题的演示: 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.a

我想通过在for循环中调用
imshow
来显示一个简单的动画。下面是我的问题的演示:

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()
请注意,我在运行循环之前生成了图像,并且我所做的唯一部分是
imshow
draw
函数。我得到的结果如下所示:


我怎样才能避免这种减速呢?

事情正在减速,因为你每次都在添加越来越多的图像并绘制它们

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()

im = ax.imshow(images[0])
fig.show()
for image in images[1:]:
    im.set_data(image)
    fig.canvas.draw()
您会注意到第二种方法的速度要快得多

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()