matlab2016获取附加功能不能使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab2016获取附加功能不能使用相关的知识,希望对你有一定的参考价值。
参考技术A 在matlab编程中,有时候会遇到死循环或者其他情况程序运行不完,在这时就要强行终止程序的运行,以前一直都是用任务管理器强行关matlab,但是这样比较麻烦,今天查了一下,原来很简单ctrl+c或者ctrl+break都行!本回答被提问者采纳MATLAB:附加到预先分配的矩阵
【中文标题】MATLAB:附加到预先分配的矩阵【英文标题】:MATLAB : Appending to pre-allocated matrix 【发布时间】:2013-09-22 16:37:45 【问题描述】:我有一些带有 mxn 矩阵的 MATLAB 代码。 最初,我将第一行放入其中,然后代码通过一个 for 循环运行,该循环将剩余的 m-1 行一一追加;循环的每次迭代都有一个。 正如预期的那样,MATLAB 建议我预先分配矩阵,因为它会随着循环的每次迭代而扩展。 因此,如果我在所有 m 行中预先分配零,MATLAB 很可能会在 m 行之后追加行(从第一个追加行的 m+1 开始),因为 m 行已经被填充(即使是零!) 在这种情况下是否有任何方法可以预先分配矩阵以提高速度?
【问题讨论】:
downvoters 愿意解释原因吗?不要粗鲁的家伙。我正在尝试在这里学习 MATLAB,这是我的第二个 MATLAB 程序。我在 SO 上找不到其他相关问题。 个人没有投票,但您的问题不清楚。通过包含您的代码的 sn-p 以及对最终矩阵应该是什么的一些想法(或者如果您的最终矩阵很大,则可以简化示例),这将大大改进。 @nkjt:现在清楚了吗? 我的意思是你应该展示你的代码(只是循环)。您可能正在做您不应该做的事情(正如 chappjc 建议的那样,将带有A = [A; rowVec];
的行附加到预先分配的矩阵上,也许)。
@nkjt:这正是我正在做的......我太愚蠢了......
【参考方案1】:
您不能在不更改其大小的情况下预先分配 MATLAB 数组,至少不能手动进行。但是,MATLAB 在最近的版本中大大提高了自动数组增长的性能,因此您可能不会看到巨大的性能影响。不过,最佳做法是使用 zeros
预先分配您的数组并使用 A(i,:) = rowVec;
索引行,而不是附加一行 (A = [A; rowVec];
)。
预分配
如果您决心充分利用 MATLAB 的性能,Yair Altman 有几篇关于内存预分配主题的优秀文章:
Preallocation performance Preallocation performance and multithreading自动数组增长优化
如果您真的想通过沿维度增长来使用动态数组调整大小,有一些方法可以做到这一点。看到这个MathWorks blog post by Steve Eddins。需要注意的最重要的一点是,您应该沿着最后一个维度发展以获得最佳性能。 (即在您的情况下添加列)。 Yair 还在another post on his blog 中讨论了动态数组调整大小。
此外,还有一些方法可以在不使用一些毛茸茸的 MEX API 技巧进行初始化的情况下分配数组,但仅此而已。
【讨论】:
我认为这里回答@tumchaaditya 问题的关键是,一旦您预先分配了矩阵,您需要将输出行写入(最初为零)矩阵的正确行,而不是继续追加行。 @SchighSchagh:对。使用A(i,:) = rowVec;
而不是 A = [A; rowVec];
(或任何 tumchaaditya 正在做的事情)。以上是关于matlab2016获取附加功能不能使用的主要内容,如果未能解决你的问题,请参考以下文章