我正在制作一个收敛过程的动画,这个过程是在IPython 3.1笔记本中模拟的。我用matplotlib动画来可视化散点图结果,并通过ImageMagick将其写成动态gif文件。总共有3000帧,每帧大约有5000个点。
我不确定matplotlib如何创建这些动画文件,但它似乎会缓存一堆帧,然后一起写出它们——当我查看CPU使用情况时,开始时由Python主导,然后由convert主导。
写入gif的速度非常慢。在现代MacBook Pro的SSD上,将70MB的文件写入需要超过一个小时的时间。'convert'占用了4(8个超线程)核心机器中90%的一个核心。
写入前65MB需要大约15分钟,而最后5MB需要超过2小时的时间。
我认为代码的有趣部分如下——如果还有其他有用的信息,请让我知道。
任何想法瓶颈可能是什么,或者我如何加速它? 我希望写出时间相对于模拟时间很小。 版本:ImageMagick 6.9.0-0 Q16 x86_64 2015-05-30 http://www.imagemagick.org 版权:版权所有(C)1999-2014 ImageMagick Studio LLC 特点:DPC模块 代表(内置):bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlib
我不确定matplotlib如何创建这些动画文件,但它似乎会缓存一堆帧,然后一起写出它们——当我查看CPU使用情况时,开始时由Python主导,然后由convert主导。
写入gif的速度非常慢。在现代MacBook Pro的SSD上,将70MB的文件写入需要超过一个小时的时间。'convert'占用了4(8个超线程)核心机器中90%的一个核心。
写入前65MB需要大约15分钟,而最后5MB需要超过2小时的时间。
我认为代码的有趣部分如下——如果还有其他有用的信息,请让我知道。
def updateAnim(i,cg,scat,mags):
if mags[i]==0: return scat,
cg.convergeStep(mags[i])
scat.set_offsets(cg._chrgs[::2,0:2])
return scat,
fig=plt.figure(figsize=(6,10))
plt.axis('equal')
plt.xlim(-1.2,1.2);plt.ylim(-1,3)
c=np.where(co._chrgs[::2,3]>0,'blue','red')
scat=plt.scatter(co._chrgs[::2,0],co._chrgs[::2,1],s=4,color=c,marker='o',alpha=0.25);
ani=animation.FuncAnimation(fig,updateAnim,frames=mags.size,fargs=(co,scat,mags),blit=True);
ani.save('Files/Capacitance/SpherePlateAnimation.gif',writer='imagemagick',fps=30);
任何想法瓶颈可能是什么,或者我如何加速它? 我希望写出时间相对于模拟时间很小。 版本:ImageMagick 6.9.0-0 Q16 x86_64 2015-05-30 http://www.imagemagick.org 版权:版权所有(C)1999-2014 ImageMagick Studio LLC 特点:DPC模块 代表(内置):bzlib cairo djvu fftw fontconfig freetype gslib gvc jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png ps rsvg tiff webp wmf x xml zlib
ps -aef
报告:
convert -size 432x720 -depth 8 -delay 3.3333333333333335 -loop 0 rgba:- Files/Capacitance/SpherePlateAnimation.gif
convert
是如何被调用的吗?我的意思是它接收了什么参数? - Mark Setchellps -aef | grep convert
命令来查看参数。 - Mark Setchell