图像缩略图

快速编写MATLAB代码

版本1.1.0.0(328 KB) 帕斯卡Getreuer
使用此技术集合加速您的项目。
4.4
83评级

21下载

更新2009年2月10

视图版本历史

查看许可证

编辑注意:此文件被选为Matlab Central本周精选受欢迎的文件2008年

了解如何使用Profiler工具,矢量化功能和其他技巧来编写高效的MATLAB代码。本文包括如何将任何数组转换为列向量,限制一个值,而不用if语句,并重复/折叠没有REPMAT的向量。

内容:
* 介绍
*分析器
*阵列预释
* JIT加速度
*矢量化
*内含简单的功能
*引用操作
解决Ax = b *
*数字集成
*信号处理
*其他技巧
*进一步阅读

引用作为

Pascal getreuer(2021)。快速编写MATLAB代码(//www.tatmou.com/matlabcentral/fileexchange/5685-writing-fast-matlab-code),Matlab中央文件兑换。检索到

评论和评级(93.

dev

丹尼尔彼得

eyal ben-hur

林林林

太棒了!谢谢你!

王虎王虎

是的,这非常有用。非常感谢你。

furusuna yume

Azalin L

嘿山姆,谢谢你指着它。

斯蒂芬Cobeldick.

写入更快的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.

Aneesh

这应该是MATLAB的每份副本都是标准问题。很有用!

emre ozan alkan.

太棒了!谢谢你!

马努

迈克尔

olexander zhytenko

很好的文档

olexander zhytenko

好,谢谢!

Sven Koerner.

大卫史密斯

MichaelVölker.

路易斯•安德烈斯

干得好!

萨维斯

非常感谢。这将对我的代码产生很大的影响

万分谢意!

纽丁

杰达

达尼拉

莱昂纳多格拉弗

Aniket

写得很好,谢谢

阮Thang

好,谢谢!

萨拉

Luigi Giaccari.

谢谢,有时PDF比M文件更好。

Sunil.

谢谢你的信息。真的有用的提示,请你建议我有关于循环的执行时间有问题,我必须在262144次上执行时间,它花太多时间约2分钟,所以我应该做些什么来减少执行时间使用了结果矩阵的预填架。

胡安-帕布鲁阿里亚斯

同庆签证官

我忘记了评级。:)))

同庆签证官

非常感谢这一点。对任何人都说的一个人说Matlab。

Gamal Alkirshi.

谢谢你关于这个信息

amit raj.

扎马Aldahiyat

这太棒了,也很有帮助。我一直在与执行缓慢的函数和百万元素矩阵斗争了很长一段时间,但现在一切都解决了。非常感谢,先生,我知道你帮了我很多忙。很多。

亚伯布朗

实际上,一个非常好的读......应该谈论BSXFUN这样的事情以及MEX文件如何与过去和当前的MATLAB速度进行比较。关于I / O和String解析的一节呢。

尼克。

用一些随机提示很少读。

:沙

Abiodun Olaluwe.

荣誉的人。我相信这个满足一定会很快满足世界上大多数MATLAB新手用户的向往。

TANEAT ZAETUNG.

伊萨克米米年代

玛丽·皮

好的

哈立德•达尔维什

伊莱亚斯倾注

钱德拉Guntupalli

钱德拉Guntupalli

biswa bhusan

好的

丹科恩

Kudos,非常丰富,写得很好。谢谢你的努力!

ntobeko zulu.

没有任何

burhan rasito

哇,太令人兴奋了

哈里·库马尔

写得很好的文章。非常有用。谢谢。

oktay gultekin

非常有用

谢谢

Dawuni Mohammed.

我是一个对这个领域有兴趣的学生。

yugandhar亚达姆

yiseth brango

excelente.

Kyoung Ho Chong.

非常有用的提示!!我喜欢它

诺伯特P.

山姆Clanton

我喜欢它,Azalin..面对糟糕的语法,更糟糕的是……

Emanuel Luduvicce.

罗布森玛利亚诺

Azalin L

有一些语法错误……但我猜你会说法语

除了……这是下降

Christoph Ullrich.

非常好的m文件优化简短介绍!

Simone Rabaovic.

vishnuvenkatesh dhage.

阿里ahsan

公平的尝试

莎拉里程

优秀的工作。
您可能想要修改提交日期。本以为是旧的,但打开后发现是2006年6月写的。

阿隆索Morgado

非常好

奥兰多罗德·吉厄斯

优秀的东西。

Guillermo Ruiz.

谢谢你真是太好了

asd asdf.

白木Moshfegh

做得好

Deepak Panwar.

金桥阴

Syed Husain.

这是一个很好的帮助工具。

Jas Ellis.

一个非常好的matlab提示的大纲。值得读书。

杰拉尔德·科尔佐

Nemo Managna.

是的,使用分析器是个好主意。通过使用分析器,我发现Pascal推荐的矩阵初始代码A = s(1 (m,n))比简单的A(1:m,1:n) = s或A = s + 0 (m,n)慢4倍。

Sivasankaran Sivanandam

Ahmed Ayoub.

smita parija

ITIS更多

Maomun Munmao.

fillfull

Izru加纳

有用

Aloser Iam.

有帮助的。

如果我们看到

O. L.

作为一个初学者,我发现了一切清晰,快速阅读,有用。做得好!

纳比尔·纳比尔

很好的文档

我需要好好

很好的描述了matlab的索引特性。请不要认为用' '转置一个矩阵也会使元素复合并置。因此,用a(:)'创建行向量应该要小心。或者,我认为应该使用转置(A:(:))。

rene只是尼尔森

一个很好的(和简短的)有用的技巧集合。

詹姆斯alaly.

谢谢,这是一个加速Matlab代码的伟大的基本指南。我希望一年前我开始用Matlab的时候就有了。

不过需要注意的是,避免repmat的方法很少更快(在Matlab 6.5中),通常比实际使用repmat要慢。

但是感谢你为此付出的努力,我把它打印出来,放在我的ML书架上Richard Johnson的“Matlab编程风格指南”旁边。

赛义德Attarzadeh

这很棒

帕斯卡Getreuer

***回复审查***

对不起,这篇文章没有帮助,也许这对你来说太过于介绍。回应你的积分:

(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中的循环速度吗?

MATLAB版本兼容性
使用R2008B创建
兼容任何释放
平台兼容性
窗户 苹果系统 Linux.
类别

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!