解決Matlab當中for循環運行慢的問題


做量化操作的時候經常需要使用到matlab編寫策略或者計算多因子,for循環非常慢,自己找了一些matlab中for循環的優化方法,for的部分每處理一個大矩陣都要花費大量的時間,這是不可避免需要遇到的問題~。

方法1:循環多不要緊,要緊的是循環嵌套得太多,要解決這個問題,需要從根本上找原因,用更好的數據結構和算法,從根源上減少對於循環的需求

方法2:將循環次數多的放在里面,循環次數少的放在外面做大循環

方法3:for循環中少用if——else if判斷,用switch——case,效率更高

方法4:多線程並發替代單循環么,盡可能利用CPU,比如用並行的parfor

1 for(int i = 0; i < 100; ++i) 2 { 3     a[i] = xxx; 4 }  

優化:

1 for(int i = 0; i < 25; i += 4) 2 { 3     a[i] = xxx; 4     a[i + 1] = xxx; 5     a[i + 2] = xxx; 6     a[i + 3] = xxx; 7 }  

減少循環次數,而且還能意外增加指令級的並行運算幾率,其次,用多線程,最簡單的就是openmp。要是對數據的處理,就用SSE指令什么的。
這樣下來。整個程序不不止快那么一點點

方法5:結合具體的循環,利用時間和空間的相互轉換,也就是用空間換時間

方法6:vectorization(向量化)處理后,例如通過對for循環的向量化,效率也有很大提高。

向量化實際上就是矩陣化,利用點運算代替for循環,利用matlab軟件強大的矩陣運算能力優化程序

1 sum1=0; 2 for i=1:100
3     for j=1:100
4         for k=1:100
5             d=i.^2+j.^2+k.^2; 6             sum1=sum1+d; 7  end 8  end 9 end

向量化之后

1 i=1:100;j=1:100;k=1:100; 2 sum1=sum(i.^2+j.^2+k.^2);

方法7:最基本的方面,別在窗口中顯示矩陣,每條語句的結尾加分號

方法8:找一台性能好的電腦,用服務器跑那就更好了!

PS:下面是一個測試,來區分優化前和優化后的時間效率問題,讀取mxm的矩陣。利用上述所提到的優化方式進行優化(具體怎么優化,還是根據實際情況進行優化,這里不做說明),如圖所示:

PS:如有問題,請留言,未經允許不得私自轉載,轉載請注明出處:http://www.cnblogs.com/xuliangxing/p/7372428.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM