了解如何使用Profiler工具,矢量化功能和其他技巧来编写高效的MATLAB代码。本文包括如何将任何数组转换为列向量,限制一个值,而不用if语句,并重复/折叠没有REPMAT的向量。
内容:
* 介绍
*分析器
*阵列预释
* JIT加速度
*矢量化
*内含简单的功能
*引用操作
解决Ax = b *
*数字集成
*信号处理
*其他技巧
*进一步阅读
Pascal getreuer(2021)。快速编写MATLAB代码(//www.tatmou.com/matlabcentral/fileexchange/5685-writing-fast-matlab-code),Matlab中央文件兑换。检索到。
太棒了!谢谢你!
是的,这非常有用。非常感谢你。
嘿山姆,谢谢你指着它。
写入更快的MATLAB代码的整洁介绍。PDF涵盖要考虑的要点,给出的一般建议是声音,示例代码应该能够帮助新的Matlab用户。
然而,有几个错误,其中一个实际上减慢了代码:
*使用|找到|当简单的逻辑索引将更快:仅使用九个代码示例中的两个查找(...)|实际上是必需的(两者都处于“矢量化逻辑”)。在所有其他代码示例中,它们可以通过逻辑索引替换,这将是更快,更简单的代码:
http://blogs.mathworks.com/steve/2008/01/28/logical-indexing/
* | Ind2sub |只有一个输出显示,而实际上,行和列索引在单独的输出中返回。因此,下标索引示例不正确。
*误导性语句(如“使用预调整小区阵列使用预调整小区阵列的PREAL分配比使用双数组更有益):MATLAB自己的文档不会进行任何此类语句,并且显然建议预先分配数字阵列。数字阵列存储在连续的内存位置,因此preLlocation对它们至关重要:这反映在Matlab自己的“改进性能”页面上的_very第一个主题_:
//www.tatmou.com/help/matlab/matlab_prog/techniques-for-for-improving-performance.ht.
预付部的部分没有提及预先利用阵列的其他方式:
1.反向循环。
2.在特定位置分配一个标量元素。
这两种方法都比在开始计算之前分配整个数组要快。
*非标准术语使读者难以将这些知识转移到Matlab自己的文件。例如,“每个元素”操作实际上是Matlab的“元素-Wise”或“数组”操作,而Matlab则称为“线性指数”中所谓的“索引”:
//www.tatmou.com/help/matlab/matlab_prog/array-vs-matrix-operations.html.
//www.tatmou.com/company/newsletters/articles/matrix-indexing-in-matlab.html.
*通过相关文档网页的超链接将显着改善,例如,对于阵列预释,元素 - 明智的操作等,以及代码示例中使用的每个函数。
*没有提及| BSXFUN |,快速高效矢量化代码中最重要和最有用的功能之一:
//www.tatmou.com/help/matlab/ref/bsxfun.html.
这应该是MATLAB的每份副本都是标准问题。很有用!
太棒了!谢谢你!
很好的文档
好,谢谢!
干得好!
非常感谢。这将对我的代码产生很大的影响
万分谢意!
写得很好,谢谢
好,谢谢!
谢谢,有时PDF比M文件更好。
谢谢你的信息。真的有用的提示,请你建议我有关于循环的执行时间有问题,我必须在262144次上执行时间,它花太多时间约2分钟,所以我应该做些什么来减少执行时间使用了结果矩阵的预填架。
我忘记了评级。:)))
非常感谢这一点。对任何人都说的一个人说Matlab。
谢谢你关于这个信息
这太棒了,也很有帮助。我一直在与执行缓慢的函数和百万元素矩阵斗争了很长一段时间,但现在一切都解决了。非常感谢,先生,我知道你帮了我很多忙。很多。
实际上,一个非常好的读......应该谈论BSXFUN这样的事情以及MEX文件如何与过去和当前的MATLAB速度进行比较。关于I / O和String解析的一节呢。
用一些随机提示很少读。
荣誉的人。我相信这个满足一定会很快满足世界上大多数MATLAB新手用户的向往。
好的
好的
Kudos,非常丰富,写得很好。谢谢你的努力!
没有任何
哇,太令人兴奋了
写得很好的文章。非常有用。谢谢。
非常有用
谢谢
我是一个对这个领域有兴趣的学生。
excelente.
非常有用的提示!!我喜欢它
我喜欢它,Azalin..面对糟糕的语法,更糟糕的是……
有一些语法错误……但我猜你会说法语
除了……这是下降
非常好的m文件优化简短介绍!
公平的尝试
优秀的工作。
您可能想要修改提交日期。本以为是旧的,但打开后发现是2006年6月写的。
非常好
优秀的东西。
谢谢你真是太好了
做得好
这是一个很好的帮助工具。
一个非常好的matlab提示的大纲。值得读书。
是的,使用分析器是个好主意。通过使用分析器,我发现Pascal推荐的矩阵初始代码A = s(1 (m,n))比简单的A(1:m,1:n) = s或A = s + 0 (m,n)慢4倍。
ITIS更多
fillfull
有用
有帮助的。
作为一个初学者,我发现了一切清晰,快速阅读,有用。做得好!
很好的文档
很好的描述了matlab的索引特性。请不要认为用' '转置一个矩阵也会使元素复合并置。因此,用a(:)'创建行向量应该要小心。或者,我认为应该使用转置(A:(:))。
一个很好的(和简短的)有用的技巧集合。
谢谢,这是一个加速Matlab代码的伟大的基本指南。我希望一年前我开始用Matlab的时候就有了。
不过需要注意的是,避免repmat的方法很少更快(在Matlab 6.5中),通常比实际使用repmat要慢。
但是感谢你为此付出的努力,我把它打印出来,放在我的ML书架上Richard Johnson的“Matlab编程风格指南”旁边。
这很棒
***回复审查***
对不起,这篇文章没有帮助,也许这对你来说太过于介绍。回应你的积分:
(1)元素个数?不是MATLAB 5.3(通常使用)的函数。它是版本6.1中的标准函数。
(2)最小和MAX是以列而不是整个矩阵运行(本文包括一些讨论)。因此,涉及MIN和MAX的建议方法包括矩阵到向量转换(使用“A(:)”将A为A向向量))。它适用于所有尺寸的矩阵和N-D矩阵。
(3) not repmat方法的优点是没有函数调用——对于单个平铺操作来说,它不会快很多,但对于许多单独的平铺操作来说,它会有所不同。此外,MATLAB 4.0及更早版本的m-files标准不包含repmat,因此该方法也更加兼容。
(4) MEX不是本文讨论的主题,只是提到。我同意,写作和同行要困难得多,只能作为最后的手段。
(5)是,是的,循环有一个公平的开销。尝试具有许多迭代和单行内部循环的for循环的曲线。
您应该调查numel,而不是然后prod(size(x))。还要注意推荐任何或全部或甚至最小和最大值。他们在vectors上运行而不是整个矩阵!你的建议不是Repmat很糟糕。我尝试了每个例子,发现速度或更快。我的矩阵在其中大约有500万个数字。我建议的最后一件事是使用MEX文件。虽然它可以更快,但编写,对等体和调试需要更长的时间。你检查了Matlab中的循环速度吗?