zoukankan      html  css  js  c++  java
  • 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 

    看后请点赞
  • 相关阅读:
    中国的网游,发人深省
    .NET开源Bug管理软件BugTracker.NET使用小记
    开源的学术论文排版软件TeX简介
    在sqlplus中批量执行sql命令
    DotNetBar中ExpandableSplitter使用技巧
    上传一很酷的黑色背景.vssettings文件
    瑞雪兆丰年2008年的第一场雪
    Oracle用Start with...Connect By子句递归查询
    【转载】Making new features with topology tools(ArcInfo and ArcEditor only)
    Geoprocess Execute出错原因?Vb+AE9.2
  • 原文地址:https://www.cnblogs.com/hyb221512/p/9265583.html
Copyright © 2011-2022 走看看