2015-02-23 59 views
0

我正在寫一個代碼來適合函數的高斯,如果我不繪製結果(它是一個〜60x60光譜的數據立方體,所以我使用循環)代碼的工作速度非常快。但是當我說代碼來繪製每一張圖時,它變得非常慢,像2張圖(秒)(如果我不繪製它的確如40),就會變得很慢。繪製循環真的很慢

好的,我知道減慢速度是正確的,但IDL中有一個代碼完全相同,代碼每秒運行8〜10個繪圖。

有沒有辦法改善它?或者Python比IDL真的慢?

這裏是陰謀代碼:

plt.plot(wavelengthset, data_datacube[minpixel:maxpixel+1, j, i], 'k-', 
     wavelengthset, gaussian(fit[0], wavelengthset), 'r-') 

plt.draw() 

plt.clf() 

回答

0

我建議考慮去除plt.draw()和使用blit。如果這不夠,請讓我多瞭解一些關於您的數據和情節的目的。

看到這個答案的詳細信息:why is plotting with Matplotlib so slow?

截至上面的鏈接答案中提到,matplotlib面向質量,可定製的,互動的情節。 Matplotlib可能比您在IDL中熟悉的數據處理工具要慢,但這並不是說另一種速度意識的Python工具包不會像快速/有用一樣。

祝你好運!

+0

我想了解blitting的事情,我有一個問題 blit是一個包還是它是其他包使用的函數?例如,PyQtGraph使用blitting?或者blit是我需要使用的命令? – 2015-02-23 14:12:26

+0

順便說一句,如果blit是一個命令,你可以給我一個關於如何使用它的例子嗎? – 2015-02-23 14:36:25

+0

這是matplotlib中的一個可選參數,意味着只有被更改的部分應該重繪。這可能只是動畫,我不確定它是否會幫助你。再次,我不知道你想要做什麼。 下面是關於它的一個很好的答案:http://stackoverflow.com/questions/14844223/python-matplotlib-blit-to-axes-or-sides-of-the-figure – 2015-02-23 14:36:35