http://www.360doc.com/content/10/0610/22/1217721_32411251.shtml

  1. 避免使用for循环:

在Matlab中,for循环运算效率非常低,因为Matlab是一种解释语言。像矩阵乘法的宏操作与诸如增加标号的微操作差不多一样快,因为代码解释的顶层都存在于这两个情形之中。for循环应该只用于做最后的手段,并且一般用于控制运算,而不是由于计算的原因。

一般的Matlab程序中,90%的for循环都可以用等效但更为快速的向量代码代替。(一般为寻找替代函数或使用

技巧)例如,求和运算就可以使用sum函数,也可以通过将该向量乘以所有元素都为1的列向量来求得。

  1. 向量化

转换一个for循环矩阵向量的操作过程可以称为向量化。有时向量化看上去似乎十分低效,因为可能它做了比

for循环更多的计算。然而,向量化后的程序运行速度要快得多,因为重复应用到这个向量的是一个简单运算。

1) 重复行与列经常需要从头至尾重复一个或多个数值来构建矩阵。如果矩阵所有的数值都要相同,则可以使用像ones和zeros这样的函数。但是假设有一个行向量x,并且要产生一个10行的矩阵,其每一行都是x的复制。这里应避免使用循环,而是使用外积矩阵乘法操作。

X = ones(10,1)*x

2) 向量逻辑操作

程序运行速率慢的一个地方是条件语句。表面上看,条件检验无法进行向量化,但实际上,在Matlab中,如大于、等于这些比较函数都能够在向量或矩阵上运算。这样,下面的Matlab代码

[1 2 3 4 5 6] <  4

将返回结果[1 1 1 0 0 0],其中0代表假,1代表真。由后面产生一个冲激信号向量的技巧给出另一个简单例

子:

nn = [-20:80];

impulse = (nn==0); stem(nn,impulse);

3) Clip函数向量化

Clip函数用来以给定的上限和下限剪切一个输入信号。用常用的语句编写的代码如下:

function y = clip(x,lo,hi)

%Clip --- threshold large and small elements in matrix x

%======>slowest possible version <========= [M,N] = size(x);

for m = 1:M for n = 1:N if x(m,n) > hi x(m,n) = hi;

elseif x(m,n) < lo x(m,n) = lo; end,end,end

y = x;

上面代码具有双重嵌套的for循环,用于经过矩阵所有的元素。为得到速度较快的版本,必须完全放弃该循环而利用逻辑操作的向量性质。进一步,我们可以利用:true和false具有1和0的数值作为屏蔽,例如上述代码可以改写如下:

function y = clip(x,lo,hi)

%=========>fast version<=========

%(uses matrix logicals to replace loops) y = (x .* [x<=hi]) + (hi .* [x>hi]);

y = (y .* [x>=10]) + (lo .* [x<lo]);

如果使用上面的方法,算术运算的次数大于第一个版本。(可以使用etime和flops函数对这两个版本的函数进行计时)。即使是产生第二个版本需要进行10倍次数的大量计算的情形,第二个版本仍运行得比第一个版本快上10 倍。

4)“:”算子

“:”符号可以通过给出起始序号、步长以及结尾序号来产生标号范围。因此,规则相间的整数(或实数)向量可经由下式得到

iii = start:skip:end

另外,“:”可以与矩阵结合起来操作,对矩阵A,A(2:5,1:3)分出一个4*3的子矩阵。而A(:)产生一个列向量,该向量正是A的连接在一起的列。矩阵A的更一般的“再成形”可以用reshape(A,M,N)函数实现。

5)经常使用help指令来查询函数的帮助信息,而用type指令查看函数内容

避免for循环的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. sql语句中left join和inner join中的on与where的区别分析

    关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用到ON和WHERE的条件查询,以前用的时候有时是凭感觉的,总是没有搞清楚,今日亲自测试了下 ...

  2. Archlinux/Manjaro使用笔记-报错:一个或多个 PGP 签名无法校验!的解决方法

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 解决办法:添加无法校验的pgp签名为信任 gpg --recv-keys xxxxxx xxxxxx为无法校验的gpg值

  3. JavaSE 软件工程师 认证考试试卷2

    JavaSE 软件工程师 认证考试试卷   笔试   考试时间150分钟 总分 100分   姓    名_______________________ 身份证号___________________ ...

  4. Python 简单分页思路

    一: li = [] for i in range(1000): li.append(i) while True: p = input('input page: ') p = int(p) start ...

  5. python爬虫入门---第四篇:网站对爬虫的限制及突破测试

    大部分网站对网络爬虫都有限制,限制方式有两种: 一.Robots协议:二.网站通过判断对网站访问http的头部信息来查看是否是爬虫,并对爬虫做相关拦截 第一种限制是书面限制,第二种是强制性阻拦限制.那 ...

  6. [VUE ERROR] Invalid options in vue.config.js: "publicPath" is not allowed

    项目在build的时候报的这个错误: 具体原因是因为版本支持的问题,publicPath 属性到 vue-cli 3.2.0 之后才支持,所以将 publicPaht 改成 baseUrl 即可,或者 ...

  7. 安全测试 WEB安全测试手册

    WEB安全测试手册 By:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436 概述 Ø          目的 Ø          适用读者 Ø          适用 ...

  8. 我的博客:C# PHP J2ee Java Android js WP Asp.net mvc Python

    <p><A target="_blank" href="http://blog.163.com/hr_company_product/" &g ...

  9. 为什么 APM 能提升 IT 团队工作质量?

    “有必要吗?”这是很多 IT 专业人员在尝试向团队内部推荐应用程序性能管理价值时所面临的问题.APM(应用程序性能管理)能为公司节约成本,提高内部工作效率,并真实了解用户对公司的系统和产品是否满意.除 ...

  10. Spark线性回归实现优化

    import org.apache.log4j.{Level, Logger} import org.apache.spark.ml.feature.VectorAssembler import or ...