我有一些带有 mxn 矩阵的 MATLAB 代码。
最初,我将第一行放入其中,然后代码通过一个 for 循环运行,该循环将剩余的 m-1 行一一追加;一个循环的每次迭代。
正如预期的那样,MATLAB 建议我预先分配矩阵,因为它会随着循环的每次迭代而扩展。因此,如果我在所有 m 行中预先分配零,MATLAB 很可能会在 m 行之后追加行(从第一个追加行的 m+1 开始),因为 m 行已经被填充(即使是零!)
有没有在这种情况下预先分配矩阵以提高速度的方法?
问问题
583 次
1 回答
2
您不能在不更改其大小的情况下预先分配 MATLAB 数组,至少不能手动分配。但是,MATLAB 在最近的版本中大大提高了自动数组增长的性能,因此您可能不会看到巨大的性能影响。不过,最佳做法是预先分配您的数组zeros
并使用索引行A(i,:) = rowVec;
而不是附加行 ( A = [A; rowVec];
)。
预分配
如果您决心充分利用 MATLAB 的性能,Yair Altman 有几篇关于内存预分配主题的优秀文章:
自动阵列增长优化
如果您真的想通过沿维度增长来使用动态数组调整大小,有一些方法可以做到这一点。请参阅 Steve Eddins 的这篇MathWorks 博客文章。需要注意的最重要的事情是,您应该沿着最后一个维度增长以获得最佳性能。(即在您的情况下添加列)。Yair 还在他博客上的另一篇文章中讨论了动态数组调整大小。
此外,还有一些方法可以在不使用一些毛茸茸的 MEX API 杂技进行初始化的情况下分配数组,但仅此而已。
于 2013-09-18T05:32:20.697 回答