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获取附加功能不能使用的主要内容,如果未能解决你的问题,请参考以下文章

matlab附加功能安装程序失败

matlab_fitcsvm & fitcecoc函数示例学习

智能优化算法——模拟退火法(Python&Matla实现)

matlab基本语法

将 MATLAB 代码转换为库

定点 MATLAB DSP 算法