MATLAB:附加到预先分配的矩阵

时间:2013-09-18 03:37:18

标签: matlab memory-management

我有一些带有mxn矩阵的MATLAB代码 最初,我在其中放入第一行,然后代码运行一个for循环,逐个追加剩余的m-1行;循环的每次迭代都有一个 正如预期的那样,MATLAB建议我预先分配矩阵,因为它随着循环的每次迭代而扩展。 因此,如果我在所有m行中预先分配零,MATLAB很可能会在m行之后追加行(从第1个附加行的m + 1开始),因为m行已经填充(即使用零!)
在这种情况下,是否有任何预先分配矩阵的方法来提高速度?

1 个答案:

答案 0 :(得分:2)

你不能预先分配MATLAB数组而不改变它的大小,至少不能手动。但是,MATLAB在最近的版本中已经大大提高了自动阵列增长性能,因此您可能不会看到巨大的性能损失。不过,最佳做法是使用zeros预分配数组,并使用A(i,:) = rowVec;对行进行索引,而不是追加行(A = [A; rowVec];)。

预分配

如果您决心从MATLAB中挤出所有性能,Yair Altman就内存预分配主题发表了几篇优秀文章:

自动阵列增长优化

如果你真的想通过沿着维度增长来使用动态数组大小调整,那么有很多方法可以做到。见MathWorks blog post by Steve Eddins。最重要的一点是,您应该沿最后一个维度增长以获得最佳性能。 (即在您的案例中添加列)。 Yair还讨论了another post on his blog中动态数组的大小调整。

此外,有一些方法可以在不使用一些毛茸茸的MEX API杂技进行初始化的情况下分配数组,但就是这样。