做量化操作的时候经常需要使用到matlab编写策略或者计算多因子,for循环非常慢,自己找了一些matlab中for循环的优化方法,for的部分每处理一个大矩阵都要花费大量的时间,这是不可避免需要遇到的问题~。

方法1:循环多不要紧,要紧的是循环嵌套得太多,要解决这个问题,需要从根本上找原因,用更好的数据结构和算法,从根源上减少对于循环的需求

方法2:将循环次数多的放在里面,循环次数少的放在外面做大循环

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

方法4:多线程并发替代单循环么,尽可能利用CPU,比如用并行的parfor

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

优化:

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

减少循环次数,而且还能意外增加指令级的并行运算几率,其次,用多线程,最简单的就是openmp。要是对数据的处理,就用SSE指令什么的。
这样下来。整个程序不不止快那么一点点

方法5:结合具体的循环,利用时间和空间的相互转换,也就是用空间换时间

方法6:vectorization(向量化)处理后,例如通过对for循环的向量化,效率也有很大提高。

向量化实际上就是矩阵化,利用点运算代替for循环,利用matlab软件强大的矩阵运算能力优化程序

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

向量化之后

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

方法7:最基本的方面,别在窗口中显示矩阵,每条语句的结尾加分号

方法8:找一台性能好的电脑,用服务器跑那就更好了!

PS:下面是一个测试,来区分优化前和优化后的时间效率问题,读取mxm的矩阵。利用上述所提到的优化方式进行优化(具体怎么优化,还是根据实际情况进行优化,这里不做说明),如图所示:

PS:如有问题,请留言,未经允许不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/7372428.html 

MATLAB中的FOR循环问题的更多相关文章

  1. matlab中循环的使用

    转载自 https://blog.csdn.net/ssure/article/details/30329601 matlab 中的while循环只有 while statement .... end ...

  2. matlab中for 用来重复指定次数的 for 循环

    参考:https://ww2.mathworks.cn/help/matlab/ref/for.html?searchHighlight=for&s_tid=doc_srchtitle for ...

  3. MATLAB中绘制质点轨迹动图并保存成GIF

    工作需要在MATLAB中绘制质点轨迹并保存成GIF以便展示. 绘制质点轨迹动图可用comet和comet3命令,使用例子如下: t = 0:.01:2*pi;x = cos(2*t).*(cos(t) ...

  4. Matlab中的一些小技巧

    (转于它处,仅供参考) 1.. Ctrl+C 中断正在执行的操作 如果程序不小心进入死循环,或者计算时间太长,可以在命令窗口中使用Ctrl+c来中断.MATLAB这时可能正疲于应付,响应会有些滞后. ...

  5. matlab中findstr,strfind,strcmp,strncmp区别与联系

    在Matlab中,这几个函数区分如下: (以下默认S1和S2是字符串,同样也适用于cell细胞类型数据,也就是循环对cell中每个元素分别判断即可.) findstr(S1,S2):寻找是否有S1和S ...

  6. 【caffe-windows】 caffe-master 之Matlab中model的分类应用

    此篇讲述在matlab中,如何将训练好的model用于图像分类.将以mnist为例,主要用到caffe-master\matlab\demo 下的classification_demo.m ,可参考我 ...

  7. Matlab中plot函数参数解析

    功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1,...) plot(X1,Y1,LineSpec,...) plot(...,'PropertyName',PropertyValue, ...

  8. matlab中读取txt数据文件(txt文本文档)

    matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...

  9. 关于MATLAB中的tic toc的问题

    关于MATLAB中的tic toc的问题 其一) MATLAB实际单位时间计时函数的具体应用,在编写程序时,经常需要获知代码的执行实际时间,这就需要在程序中用到计时函数,matlab中提供了以下三种方 ...

随机推荐

  1. Spring Security OAuth2 SSO 单点登录

    基于 Spring Security OAuth2 SSO 单点登录系统 SSO简介 单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自 ...

  2. Java-关于类

    java-关于类-成员初始化问题 成员初始化出现错误“    - Syntax error on token ";", , expected” java类不允许对成员进行操作,但可 ...

  3. Linux 学习记录 四(Bash 和 Shell scirpt).

    一.什么是 Shell? 狭义的shell指的是指令列方面的软件,包括基本的Linux操作窗口Bash等,广义的shell则包括 图形接口的软件,因为图形接口其实也可以操作各种驱动程序来呼叫核心进行工 ...

  4. 详解promise、async和await的执行顺序

    1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async function async1(){ console.log('async1 sta ...

  5. Python全栈学习_day004作业

    ,写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&qu ...

  6. linux学习笔记-lrmi源码包的编译安装方法

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 官方的lrmi包没有人更新了,如果碰到需要这个编译安装这个包,可以参考我的解决思路,如下: https://pkgs.org/这 ...

  7. linux学习笔记-目录结构(2)

    2./usr的意义与内容 依据FHS的基本定义,/usr里面放置的数据属于可分享的与不可变动的. usr是UNIX Software Resource的缩写,即UNIX操作系统软件资源所放置的目录,而 ...

  8. Lightning 组件基础知识

    Lightning框架简介 Lightning框架是Salesforce提供的一套基于用户界面的开发框架,对于开发单页面应用(Single Page Application)有很大的帮助.它和Visu ...

  9. flask中的url_for的使用

    有多个路由的程序需要连接不同的网页链接,例如导航条 模板中构建正确的动态url较为困难,如果重定义路由,模板中的链接失效 url_for()函数: 使用url映射中保存的信息生成url 用法: 用视图 ...

  10. C++ Standards Support in GCC - GCC 对 C++ 标准的支持

    C++ Standards Support in GCC - 2019-2-20 GCC supports different dialects of C++, corresponding to th ...