如何提高matlab运行效率
并不是所有的代码都需要追求极致速度。使用 profile 命令来查看代码运行的瓶颈,找出最需要优化的点。
减少不必要的循环。
不过,使用 arrayfun/cellfun/structfun
通常并不会提高代码运行速度,它只是帮你把代码压缩成一行,以及消除一段缩进。你需要真正的矢量化你的代码。在代码矢量化技巧中,除了用类似
bsxfun/cumsum/accumarray 这类「神器」外,其实更多情况下,只依靠点系列运算符(如:.*)、矩阵乘法、冒号(:)运算符、逻辑索引,以及 Matlab 内建的许多天生支持矢量化操作的函数,如 sin/sum/max/filter 等,就已经足够应付了。做到 0 warning。许多影响代码运行性能的问题,Matlab 能够提前帮你预见到,并以 warning 的方式提醒你,例如:循环中大小不断增长的矩阵,不必要的 find 调用,或者 disp(sprintf('Hello world!')) 等等……
使用 mex 函数。通常我不推荐使用 mex 函数,因为太多人用它只是因为他们对 C/C++ 更熟悉,用 Matlab 却只会玩玩 plot(而且是连坐标轴标签都不画的那种)。但若真的有需求,mex 就是你最后的希望。详细情况,还是咨询文档吧。