【转】提高matlab程序的运行速度

原创 2010年04月24日 21:06:00

http://lavandedemer.blog.sohu.com/143158231.html

对于撰写高效MATLAB代码,一些建议:
虽然for-loop的速度有了很大改善,vectorization(向量化)仍旧是改善效率的重要途径,尤其是在能把运算改写成矩阵乘法的情况下,改善尤为显著。
在不少情况下,for-loop本身已经不构成太大问题,尤其是当循环体本身需要较多的计算的时候。这个时候,改善概率的关键在于改善循环体本身而不是去掉for-loop。
MATLAB的函数调用过程(非built-in function)有显著开销,因此,在效率要求较高的代码中,应该尽可能采用扁平的调用结构,也就是在保持代码清晰和可维护的情况下,尽量直接写表达式和利用built-in function,避免不必要的自定义函数调用过程。在次数很多的循环体内(包括在cellfun, arrayfun等实际上蕴含循环的函数)形成长调用链,会带来很大的开销。
在调用函数时,首选built-in function,然后是普通的m-file函数,然后才是function handle或者anonymous function。在使用function handle或者anonymous function作为参数传递时,如果该函数被调用多次,最好先用一个变量接住,再传入该变量。这样,可以有效避免重复的解析过程。
在可能的情况下,使用numeric array或者struct array,它们的效率大幅度高于cell array(几十倍甚至更多)。对于struct,尽可能使用普通的域(字段,field)访问方式,在非效率关键,执行次数较少,而灵活性要求较高的代码中,可以考虑使用动态名称的域访问。
虽然object-oriented从软件工程的角度更为优胜,而且object的使用很多时候很方便,但是MATLAB目前对于OO的实现效率很低,在效率关键的代码中应该慎用objects。
如果需要设计类,应该尽可能采用普通的property,而避免灵活但是效率很低的dependent property。如非确实必要,避免重载subsref和subsasgn函数,因为这会全面接管对于object的接口调用,往往会带来非常巨大的开销(成千上万倍的减慢),甚至使得本来几乎不是问题的代码成为性能瓶颈。

相关文章推荐

提高matlab运行速度

  • 2011年10月09日 22:21
  • 7KB
  • 下载

MATLAB 与C混合编程:通过mex提高运行速度

把耗时的函数(尤其是包含大量循环)用c语言实现,并编译成mex函数可以加快执行速度。 Matlab本身是不带c语言的编译器的,所以要求你的电脑上已经安装有VC6.0或Visual Studio或其他编...

提高matlab运行速度的心得

http://www.ilovematlab.cn/forum.php?mod=viewthread&tid=38382 首先说说Matlab与其他语言的差异:例如对于C或者C++来说,只要算法的思...

(转)【Android游戏开发之十】(优化处理)详细剖析Android Traceview 效率检视工具!分析程序运行速度!并讲解两种创建SDcard方式!

李华明Himi 原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/android-game/316.html   ...
  • gxj1680
  • gxj1680
  • 2013年04月03日 18:02
  • 444

如何利用VS的代码优化和openmp并行计算提高程序运行速度

以前利用多线程为拥有较大量计算的程序提速过,但也深知多线程的同步和程序的调试是一大坑,最近为实验室的项目学习了一点VS下优化代码的设置以及利用openmp加速运算,都是些很基本的提升程序速度的方法,只...

matlab计算卫星位置及运行速度

  • 2010年06月22日 12:49
  • 4KB
  • 下载

加快MATLAB运行速度的三个方法

转自:http://www.matlabfan.com/viewthread.php?tid=893&page=1&fromuid=1217#pid7449 一、 遵守Performance A...

优化asp.net程序的运行速度

  • 2012年06月13日 10:24
  • 1KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【转】提高matlab程序的运行速度
举报原因:
原因补充:

(最多只允许输入30个字)