• 改善Matlab的运行效率的技巧

    改善Matlab的运行效率 一叶方舟 2012.04 1. 改善运行的技巧 1.1 分析程序的运行状况 1) Profiler工具 使用Profiler工具找到话费时间比较多的代码行的位置并优化这些代码 2) 查看运行时间的函数 tic --程序段 time=toc 3) 计算短程序运行所花费的时间 有的程序很短,运行时,速度太快,以至于使用tic和toc不能得到有用的信息,可尝试把程序放到一个循环中来计算 tic for k=1:100 --运行程序100次 end toc 1.2 循环矢量化 1) 矢量化方法 矢量化是指将for循环和while循环转换为等价的矢量或矩阵操作 2) 使用矢量化的函数 Table 1 MATLAB中使用了矢量化的函数 all diff ipermute permute reshape squeeze any find logical prod shiftdim sub2ind cumsum ind2sub ndgrid repmat sort sum 1.3 数组的内存预分配 1) 给数组预分配内存 预分配使得不必在每次数组变大时进行改变,针对不同类型的数组使用合适的预分配函数 数组类型 预分配函数 示例 数值数组 zeros y=zeros(1,100) 单元数组 cell B=cell(2,3); B{1,3}=1:3; B{2,2}=’string’; 结构数组 struct repmat data=repmat(struct(‘x’.[1 3],… ‘y’,[5 6]),1,3); 2) 给非double型矩阵预分配内存 下面的语句用zeros函数预分配一个uint8型100*100的矩阵,首先,创建一个double型满秩矩阵,然后把矩阵转换为uint8型,这将导致不必要的时间和内存花费 A=int8(zeros(100)); 使用repmat函数,只需要创建一个double值,从而减少了对内存的需求 A=repmat(int8(0),100,100); 在不能进行预分配的时候,看是否能通过repmat函数使数组变大,用repmat函数扩展矩阵时,可以获得连续的内存块 1.4 其他方法 1) 用MEX文件编写循环代码 必须使用for循环时,把它写为MEX文件,因为不必在每次运行循环中的语句时都对他们进行解释 2) 操作实型数据 MATLAB特意为实数设计了一些函数,如reallog,realpow,realsqrt等 3) 函数比脚本运行更快 4) 使用load函数和save函数比Matlab文件I/O过程更好 5) 避免大型后台处理 2. 程序运行情况监测-Profiler Profiler是一个能够检测程序运行状况的工具,它告诉你M文件中哪些代码行最花费时间,哪些行被调用的次数最多,然后就可以利用上面的方法对这些代码进行改进。 其实也可以使用Profiler理解文件,对于很长不是自己创建的M文件,或者其他不熟悉的M文件,可以使用Profiler查看M文件是如何工作的,用详细报表查看隔行的实际调用情况。 3. 使用Profile函数 Profiler的运行是基于profile函数返回的结果的,但有一些profile函数具有的特点Profiler中并没有,具体查看help 4. 有效使用内存 1) 内存管理函数 使用下面这些函数,可以帮助在Matlab中管理内存 (1) whos函数:显示给工作空间中的变量分配了多少内存 (2) pack函数:把已经存在的变量保存到磁盘,然后重新存入,这将减少因为内存碎片出问题的机会 (3) clear函数:从内存中删除变量,增加可用内存的一种方法是周期性地把不再使用的变量从内存中清楚出去 (4) save函数:有选择地把变量保存到磁盘,使用大量数据时,这是一个有用的技巧 (5) load函数:重新载入数据文件 (6) quit函数:退出matlab并返回所有分配的内存到系统中 2) 节约内存的方法 本节介绍帮助你更节约内存,并避免出现“out of memory”的错误 (1) 使用变量 • 避免创建大型临时性变量,不再需要时清楚他们 • 使用固定大小的数组时,尽量进行预分配 • 将变量设置为空矩阵[],将他从内存中清除,或用clear函数 • 尽量重用变量 (2) 把数据压入内存 因为Matlab用堆管理内存,所以运行时会产生内存碎片,使内存产生很多闲置的空间,当闲置空间太多时,就没有足够的内存保存新的大型变量,并导致“Out of memory”错误产生,此时,可使用pack函数把数据压入内存,从而把更多相邻的内存块释放出来。 注:从时间上考虑,不要在循环或M文件函数中使用pack函数 (3) 有大量数据的情况 如果程序生成大量数据,建议周期性地把数据写入磁盘,保存一部分数据之后,从内存中清除变量并继续生成数据。 (4) 把满秩矩阵转换为稀疏矩阵 大部分元素为0的矩阵最好保存为系数矩阵,使用sparse函数进行转换 Reference [1] Matlab高级编程/苏金明,刘宏,刘波编著—北京:电子工业出版社,2005.8

    2012-04-19
    4
  • Matlab代码优化的技巧’

    Matlab代码优化的技巧 向量化代码 预分配变量 应用函数 Matlab加速器 使用Profiler

    2012-04-19
    10
  • Matlab面向对象编程

    1 Getting Started 2 MATLAB Classes Overview 3 Class Definition—Syntax Reference 4 Working with Classes 5 Saving and Loading Objects 6 Value or Handle Class—Which to Use 7 Building on Other Classes 8 Properties — Storing Class Data 9 Methods — Defining Class Operations 10 Specializing Object Behavior 11 Events — Sending and Responding to Messages 12 Implementing a Class for Polynomials 13 Designing Related Classes

    2012-04-18
    34
  • 医学图像重建入门_曾更生着(中文版)

    医学图像重建入门_曾更生着(中文版),英文版请见我的其他资源

    2011-10-25
    0
  • Medical+Image+Reconstruction-A+Conceptual+Tutorial-Gengsheng+Lawrence+Zeng

    Medical+Image+Reconstruction-A+Conceptual+Tutorial-Gengsheng+Lawrence+Zeng

    2011-10-25
    11
  • 冈萨雷斯Matlab版本 附录A,函数集

    冈萨雷斯Matlab版本 附录A,函数集

    2011-10-16
    2
  • 图像配准技术及其MATLAB编程实现源码及自己测试M文件

    图像配准技术及其MATLAB编程实现源码及自己测试M文件

    2011-10-16
    49
  • 【数字图象处理疑难解析】7 图像分割和边缘检测

    【数字图象处理疑难解析】7 图像分割和边缘检测

    2011-10-15
    9
  • 数字图像处理疑难解析,(英)Petrou,机械工业,2005.4

    数字图像处理疑难解析,(英)Petrou,机械工业,2005.4 全书PDF格式

    2011-10-15
    19
  • Matlab图像处理工具箱函数

    Matlab图像处理工具箱函数Matlab图像处理工具箱函数Matlab图像处理工具箱函数

    2011-10-02
    9
上传资源赚积分or赚钱