Python 如何加速动画?

Python 如何加速动画?,python,animation,Python,Animation,我正在尝试创建我的paw数据的Matplotlib动画,在这里可以看到(250帧的256x64传感器)上的压力分布 我找到了一个应用程序,并设法让它在我自己的数据上运行。然而,“动画”是非常慢,我不知道如何加快它 下面是一个gif乔·金顿的例子,它是关于它显示的速度。考虑到测量是在125 Hz下进行的,这使得测量看起来非常缓慢。如果它以30-60 fps的速度运行,它可以在4或8秒内运行,而不是当前的20+ 我不介意使用任何我需要的工具来完成这项工作,只要有一些好的文档来说明如何去做 所以我的

我正在尝试创建我的paw数据的Matplotlib动画,在这里可以看到(250帧的256x64传感器)上的压力分布

我找到了一个应用程序,并设法让它在我自己的数据上运行。然而,“动画”是非常慢,我不知道如何加快它

下面是一个gif乔·金顿的例子,它是关于它显示的速度。考虑到测量是在125 Hz下进行的,这使得测量看起来非常缓慢。如果它以30-60 fps的速度运行,它可以在4或8秒内运行,而不是当前的20+

我不介意使用任何我需要的工具来完成这项工作,只要有一些好的文档来说明如何去做

所以我的问题是:如何加速这些动画?

但是,在t.Start(1)中,只有当数字如此大时,它才会“正常”运行:

class PlotFigure(Frame):
    """ This class draws a window and updates it with data from DataCollect
    """
    def __init__(self):
        Frame.__init__(self, None, -1, "Test embedded wxFigure")
        #Varying the size of Figure has a big influence on the speed            
        self.fig = Figure((3,3), 75) 
        self.canvas = FigureCanvasWxAgg(self, -1, self.fig)
        EVT_TIMER(self, TIMER_ID, self.onTimer)

    def init_plot_data(self):
        self.datagen = DataCollect(array3d)
        self.axes = self.fig.add_subplot(111)
        self.axes.imshow(self.datagen.next().T)

    def onTimer(self, evt):
        self.data = self.datagen.next()
        self.axes.imshow(self.datagen.next().T)
        self.canvas.draw()


当我在动画期间调整窗口大小时,它立即变慢为爬行。这让我怀疑延迟不是减速的唯一原因还有其他建议吗?如果您感到好奇,

传递给
wx.Timer.Start()
的值是以毫秒为单位的触发率。传递一个较小的值。

使用探查器查找根本原因,跳帧作为最后手段可能也很有用

或者改用我找到的替代解决方案,如或…

。起初,我无法让它在我自己的数据上运行,但我们设法找到了如何适应我的数据

import numpy, glumpy
from glumpy.pylab import *

window = glumpy.Window(256,64)
Z = data.astype(numpy.float32)

t0, frames, t = 0,0,0
fig = plt.figure(figsize=(7,7))
ax = plt.subplot(111)
ax = imshow(Z[:,:,0], origin='lower', interpolation='bilinear')
show()
window = glumpy.active_window()

@window.event
def on_idle(dt):    
    global Z, t0, frames, t
    
    t += dt
    frames = frames + 1
    if frames > 248:
        fps = float(frames)/(t-t0)
        print 'FPS: %.2f (%d frames in %.2f seconds)' % (fps, frames, t-t0)
        frames,t0 = 0, t
    
    for image, axis, alpha in items:
        image.data[...] = Z[:,:,frames]
        image.update()
    window.draw()

window.mainloop()
最终的结果可以在这里看到,无论我的窗口有多大,它都将以58+fps的速度稳定运行。所以我必须说,我对最终结果非常满意


创建png文件并将其缝合成动画gif怎么样?这似乎不是一个很好的长期解决方案@ralu,因为我还必须将所有gif存储在数据旁边。每次临床医生想要查看测量值时生成GIF似乎也很麻烦。。。我更愿意学习如何正确操作它在Matplotlib示例@Ignacio中起作用,因此我必须找出如何使用自己的数据复制它。我设法调整了代码,因此我将间隔设置为1。但它仍然不是真正的性能。。。也许还有其他的建议吗?在这一点上,其他的东西起着瓶颈的作用,比如CPU、显卡或内存(当然还有代码本身)。试着用一个较小的图像来测试它。它在Matplotlib中的示例中运行得很快,但在我的数组中运行得很慢。当图形曲面变大时,它也会变慢。考虑到我电脑的规格,我怀疑我的问题出在我的代码中:\I get
Traceback(最近一次调用):window=glumpy.window(256,64)File/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site packages/glumpy/window/backend\u glut.py),window第95行,in\uuuuuu init\uuuuuuuuuuuu window.window__(self,size,position,title)File“/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site packages/glumpy/window/window.py”,第156行,在uuuu init_uuuuuself中。宽度,self。高度=大小类型错误:“int”对象不可写
可能他们更改了函数。init读取:
def uu init(self,大小=(640480),position=(0,0),title=None):
因此尝试将
glumpy.Window(256,64)
更改为
glumpy.Window(size=(256,64))