解决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 

posted @ 2017-08-16 11:21  法号阿兴  阅读(22237)  评论(1编辑  收藏  举报