2015-12-17 112 views
2

我維護一個軟件包,可以自動攝取數據。導入原始數據時,將繪製原始數據並將一些數據圖形保存到磁盤。不幸的是,print函數大大降低了我的性能。在Matlab中優化打印功能

下面是代碼性能的擊穿

我的執行時間
Script  Time 
myscript  9.091s 
uichoosefile 3.567s 
print  4.178s 
legend  0.751s 

只有大約3/4S是真正的處理時間和print是最大的timesink這裏。

print兩條線佔用的時間

Line Code        Time 
212 pj = pj = alternatePrintPath(pj); 3.173s 
148 drawnow;       0.751s 

如何創建的print的優化版,不被這兩條線的瓶頸幾乎是100%?諸如降低圖形分辨率的簡單優化例程是不可取的。

+0

'print'是一個很大的功能,可以做很多事情。你打電話過得怎麼樣?請提供示例代碼來演示您正在嘗試執行的操作。 – horchler

+0

此時你是否需要將圖形保存爲光柵格式(PNG,JPG或者是否導出它們),或者您可以將.fig文件保存爲hgsave並將其推遲到後期階段? – txpaulm

+0

@txpaulm不幸的是我沒有限制矢量或光柵格式的豪華。當數據被攝入時,客戶的配置文件也被取消,其中指定了其數據,PNG,PDF,SVG,EPS等的交付格式。PDF + PNG是最典型的情況。打印在執行過程中發出命令時很麻煩,所以我不相信推遲保存是非常可行的;它可能會中斷,例如,操作員在保存程序中點擊。 –

回答

1

Matlab實際上比較特殊,因爲它很容易優化其內部功能。 I did thisode15s在我編寫的systems biology modelling工具箱中。

這是你怎麼做你自己:

  1. 創建一個新的文件夾。我會叫它image_print
  2. 該文件夾添加到Matlab的路徑,你可以用它隨時隨地addpath('image_print')
  3. 複製要優化到新文件夾image_print,並給該文件一個新名稱的功能。我會稱之爲printimage.m
  4. 在原始函數所在的文件夾中,將會有一個名爲private的文件夾。將該文件夾複製到您的新文件夾image_print。保留名稱爲private

現在,您可以使用printimage並優化它,而無需搞亂Matlab的其餘部分。實際上有什麼幫助將完全取決於您的實際工作流程,並且需要相當的巧妙。你使用profiler從正確的位置開始。基本上,你必須通過反覆試驗找出緩慢的步驟,然後看看是否有更快的方法來專門爲你的工作做。原始功能非常一般,因此您可以將整個部分剪掉。不要忘記,您也可以修改private中的功能。

獎勵建議:因爲您只想將數字保存到磁盤,您可能需要關注如何防止它們浪費實際繪製到屏幕上的時間。您可以完全評論drawnow行,但請回報實際發生的情況。

+0

,你稱這很容易? .... *重複,直到所有缺少的功能* ...我認爲你的意思是所有這些都是作爲一個諷刺的評論,我希望 – percusse

+0

@percusse命名另一種語言,可以在10分鐘內修改'print'。 – drhagen

+0

Python,Javascript,R如果你在matlab中用10分鐘完成它,我會再次開始使用它 – percusse