2013-09-16 56 views
2

我寫了下面的代碼來測試matplotlib的savefig()功能的效果:爲什麼在調用循環時plt.savefig()性能下降?

import matplotlib.pyplot as plt 
import numpy as np 
from numpy.random import rand 
import time 

for i in xrange(10): 

    init = time.time() 
    x = rand(100) 
    y = rand(100) 
    t_init=time.time()-init 

    init = time.time() 
    ax = plt.axes() 
    t_axes=time.time()-init 

    init = time.time() 
    num, _, _ = np.histogram2d(x,y) 
    t_hist = time.time()-init 

    init = time.time() 
    ax.imshow(num, extent=[-.5,.5,-.5,.5], interpolation="bicubic") 
    t_imshow = time.time()-init 

    init = time.time() 
    t = ax.text(i*.1,.1, "Value ="+str(i)) 
    plt.savefig("test/"+str(i)+".png") 
    t.remove() 
    t_savefig = time.time()-init 

    print t_init, t_axes, t_hist, t_imshow, t_savefig 

沒想到,savefig()性能與每次迭代減小,顯示在下面的表格的最後一欄:

t_inint   t_axes   t_hist   t_imshow   t_savefig 
4.10079956055e-05 0.114418029785 0.000813007354736 0.00125503540039 0.668319940567 
2.28881835938e-05 0.000143051147461 0.00158405303955 0.00119304656982 0.297608137131 
1.90734863281e-05 0.000148057937622 0.000726938247681 0.0012149810791 0.356621026993 
2.31266021729e-05 0.0001380443573 0.000706911087036 0.0011830329895 0.37288403511 
2.28881835938e-05 0.000149011611938 0.000706195831299 0.00119686126709 0.416905879974 
2.00271606445e-05 0.000148057937622 0.000704050064087 0.00118589401245 0.505565881729 
2.19345092773e-05 0.000140905380249 0.000710010528564 0.00121307373047 0.494667053223 
2.09808349609e-05 0.000147819519043 0.000703096389771 0.00119400024414 0.5519759655 
2.09808349609e-05 0.000139951705933 0.000716209411621 0.0011990070343 0.624140977859 
3.2901763916e-05 0.000142097473145 0.000709056854248 0.00120401382446 0.634006023407 

造成savefig()減速的原因是什麼?我怎樣才能避免這種行爲? 謝謝。

回答

0

如果在迭代之間執行plt.clf(),那麼計時並不會真的增加。 我的猜測是,在你之前在以前的軸上疊加繪圖(積累它們)之前,這會導致更長的savefig。