向量化编程

Matlab向量化编程,是matlab语言的精髓所在,向量化编程运用好了,可以从代码的运行效率明显改善中获得成功的快乐。
传统的流行观点大致如下:

1. 尽管避免循环的使用,多使用Matlab的内置函数;
----如果程序存在大量的循环~呵呵。mex,与C/C++混合编程就有了用武之地。
===============================================
额~~!! 高版本Matlab对循环结构的优化
Matlab引进了JIT(just in time)技术 和 加速器(accelerator)!!So,循环体本身已经不是程序性能提高的瓶颈了。

首先介绍一下profiler的用处——通过Profiler工具或profile函数,可以获取每行代码的运行情况,包括运行时间和调用次数等,因而知道哪些语句行花费的时间最多,可以集中精力进行改进。


!关于该用循环还是向量化,这是一个比较复杂的问题,哈哈!
===========================================================

2. 能用逻辑索引解决的就不用数值索引;
---MATLAB的矩阵元素索引有两类:一类是数值索引,另一类是逻辑索引。前者又可以分为线性索引和下标索引。就运行效率来说,逻辑索引要高于数值索引(why?)
     A = rand(1000);
     tic; B = A( find(A>0.3 & A<0.7) ); toc;
     tic; C = A( (A>0.3 & A<0.7) ); toc;


3. 使用变量前养成预分配内存的习惯;
---??怎么分

4. 向量化计算代替逐点计算;
5. 能用普通数值数组完成的工作,尽量不用Cell型数组;
6. 如果矩阵含有大量0元素,尽量采用稀疏矩阵来提高运算速度和减少存储空间。





=====选择循环还是向量化,建议如下:
1. 凡是涉及矩阵运算的时候,则尽量用向量化;
-----这是因为,向量化编程Matlab语言的精髓,如果不熟悉其向量化编程的方法,则相当于没掌握这门语言。Matlab以矩阵为核心,Matlab卓越的矩阵计算能力是建立在LAPACK算法包和BLAS线性代数算法包的基础之上的。这两个算法包里的程序都是由世界上多个顶尖专家并经过高度优化的程序。

2. 如果向量化可能导致超大型矩阵的产生,使用前要慎重;
-----向量化操作获得的高效率很多时候是以空间换时间实现的。

3. 向量化的使用要灵活,多分析其运行机制,并与循环做对比;

4. Matlab初学者要尽量多用向量化思路编程

1)不能把Matlab当成C/C++等语言来使用;
2)Matlab初学者一定要提醒自己,处处想尽办法矢量化编程,而暂时先不管矢量化后会不会得到性能大幅提高或者应不应该向量化。这是因为,只有当你充分熟悉MATLAB语言特点并且熟悉其最常用的内置函数之后才能灵活运用向量化和非向量化。向量化编程往往需要程序编写者熟悉MATLAB的 常用内置函数、常用技巧,并且在向量化一个程序的过程中,能有效 锻炼其观察、分析、概括、抽象、归纳的能力



5.  高效的编程包括高效的开发和高效的运行
----我们应该明白自己的程序目的是要干什么。 以后还用吗? 


============提高代码效率的方法:
2.3.4 减少无谓损耗 --- 给一些函数‘瘦身’
      编程者必须清楚,在MATLAB程序完成一个特定任务时,哪些是完成这个特定任务必须执行的代码,哪些是不必须的。举例来说:
       MATLAB自身以及工具箱里的很多函数具有较广的通用性,所为通用性是你添加必要的代码后,能处理你当前具体的问题。 如此,对于每个具体的问题,代码实际上都有冗余。如果我们的程序某些部分对通用性要求不高,那么在优化程序时就可以考虑将不必要的代码去掉,这样的结果就是重写一些简单的函数,轻装上阵。
------当然,要权衡瘦身的难度和获得的效率提升程序。
------解决自己面对的问题,首先要知道可以使用哪些函数呀~~呵呵。


2.3.5 变‘勤拿少取’为‘少拿多取’
在MATLAB中,函数调用都要有一定的开销,这种开销一般是built-in(如sin, zeros)为最低,其次是一般的M文件,即 工具箱里能看到源代码的那些M函数以及用户自己写的M文件、子函数、nested function、匿名函数等。上面这些函数类型总的来说调用开销都比较小,而调用开销最大的是inline函数类型。

函数调用开销对于一些简单的计算来说,往往是相当大的,即使是使用built-in函数类型。
--------其思想就是一次多拿一些数据,然后慢慢处理;而不要每次都调用函数处理小数据。考虑调用的开销!


2.4 应用高版本向量化函数提高开发效率
   从MATLAB7.0开始,陆续增加了一些向量化函数,使用这些函数可以减少很多循环的使用,在保证代码运行效率的前提下,使代码更加简洁。需要说明的是,很多情况下,使用这些函数其运行效率并不必恰当使用循环快多少,使用它们主要是为了 提高开发效率,使代码更加简洁
accumarray,  arrayfun,  bsxfun,  cellfunspfun, structfun
----arrayfun这个built-in函数实现的是: 将指定的函数 应用到 给定数组包括结构数组在内的 所有元素上。
这样很多以前不可避免的循环现在可以向量化了。
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Matlab向量化编程精讲》是一本介绍如何使用Matlab进行向量化编程的专业教材。在这本书中,作者详细解释了向量化编程的概念、原理和优势,并通过大量的实例和代码来演示如何在Matlab中实现向量化编程向量化编程是一种利用Matlab提供的向量和矩阵操作来高效处理数据的方法。相比于传统的循环迭代方式,向量化编程能够更快速、更简洁地实现复杂的数据处理和分析任务。通过将数据操作转化为矩阵和向量运算,可以大幅提升代码运行效率,减少内存消耗,并使代码更易于理解和维护。 本书首先介绍了向量和矩阵的基本操作方法,包括创建和初始化、索引和切片、运算和聚合等。接着,详细讲解了如何应用这些操作来解决不同类型的问题,如线性代数、统计学、信号处理等。通过实例的演示,读者可以深入理解向量化编程的思维方式,并学会将其应用到各种实际问题中。 此外,本书还介绍了一些高级的向量化编程技巧,如使用逻辑数组实现条件筛选、使用函数句柄和匿名函数实现自定义运算等。这些技巧能够进一步提升代码的效率和灵活性,使Matlab成为一个强大的数据处理工具。 总之,《Matlab向量化编程精讲》是一本帮助读者掌握Matlab向量化编程技巧的实用教材,通过系统性的讲解和实例演示,读者可以深入了解向量化编程的优势和应用,提升自己在数据处理和分析领域的能力和效率。 ### 回答2: 《matlab向量化编程精讲pdf》是一本针对matlab向量化编程技术进行详细讲解的电子书。向量化编程是一种高效的编程技术,可以大大提高matlab代码的运行速度和性能。 在传统的循环编程中,需要逐个处理数据,而向量化编程则是利用矩阵和数组的运算特性,将循环操作转化为矩阵运算。这种方式可以极大地提高代码的运行效率,减少运算时间和内存占用。《matlab向量化编程精讲pdf》中详细介绍了向量化编程的原理、应用场景和技巧。 这本电子书包括了以下内容: 1. 向量化编程的基本原理和概念:介绍了向量化编程的基本概念,如矩阵运算、广播机制等,帮助读者理解向量化编程的原理和优势。 2. 向量化编程的基本技巧:介绍了如何使用matlab中的向量和矩阵来替代循环操作,实现向量化编程。同时,还提供了一些实际案例,让读者能够更好地理解和应用这些技巧。 3. 向量化编程的应用和实践:从数值计算、数据处理、图像处理等不同领域,介绍了向量化编程在实际应用中的具体方法和技巧。同时,还提供了一些实例代码,帮助读者更好地理解和应用向量化编程技术。 4. 向量化编程的性能优化:讲解了如何进一步优化向量化编程的性能,包括减少内存占用、减少不必要的计算等方面的技巧和方法。 通过《matlab向量化编程精讲pdf》,读者可以全面了解matlab向量化编程的原理和实践技巧,并且能够应用向量化编程来提高自己的matlab代码的运行效率和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值