Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB:附加到预先分配的矩阵_Matlab_Memory Management - Fatal编程技术网

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

MATLAB:附加到预先分配的矩阵,matlab,memory-management,Matlab,Memory Management,我有一些使用mxn矩阵的MATLAB代码。 最初,我将第一行放入其中,然后代码通过一个for循环运行,该循环将剩余的m-1行逐个追加;循环每次迭代一次。 正如预期的那样,MATLAB建议我预先分配矩阵,因为它随着循环的每次迭代而扩展。 因此,如果我在所有m行中预先分配了零,MATLAB很可能会在m行之后追加行(从m+1开始追加第一行),因为m行已经被填充(即使是用零!) 在这种情况下,有没有办法预先分配矩阵以提高速度 如果不改变MATLAB数组的大小,就不能预先分配它,至少不能手动分配。然而,在

我有一些使用mxn矩阵的MATLAB代码。
最初,我将第一行放入其中,然后代码通过一个for循环运行,该循环将剩余的m-1行逐个追加;循环每次迭代一次。
正如预期的那样,MATLAB建议我预先分配矩阵,因为它随着循环的每次迭代而扩展。 因此,如果我在所有m行中预先分配了零,MATLAB很可能会在m行之后追加行(从m+1开始追加第一行),因为m行已经被填充(即使是用零!)

在这种情况下,有没有办法预先分配矩阵以提高速度

如果不改变MATLAB数组的大小,就不能预先分配它,至少不能手动分配。然而,在最近的版本中,MATLAB极大地提高了自动阵列增长性能,所以您可能不会看到巨大的性能损失。不过,最好的做法是预先为数组分配
0
,并使用
A(i,:)=rowVec而不是追加一行(
a=[a;rowVec];

预分配 如果您决心从MATLAB中挤出每一点性能,Yair Altman有几篇关于内存预分配的优秀文章:

自动阵列生长优化 如果您真的想通过沿维度增长来使用动态数组大小调整,有几种方法可以正确执行。看看这个。需要注意的最重要的一点是,您应该沿着最后一个维度增长,以获得最佳性能。(即在您的案例中添加列)。Yair还讨论了中的动态数组大小调整


另外,也有一些方法可以在不初始化的情况下使用一些复杂的MEX API技巧来分配数组,但仅此而已。

?不要做粗鲁的家伙。我正在这里学习MATLAB,这是我的第二个MATLAB程序。。我找不到其他相关的问题,所以我个人没有投反对票,但你的问题不清楚。如果包含一段代码,以及一些关于最终矩阵应该是什么的想法(或者如果最终矩阵很大的话是一个简化的例子),它将得到极大的改进。@nkjt:现在清楚了吗?我刚才说的是你应该显示你的代码(只是循环)。你可能正在做一些你不应该做的事情(正如chappjc所建议的,在预先分配的矩阵上添加带有
A=[A;rowVec];
的行)。@nkjt:这正是我所做的……我太傻了……我想这里回答@tumchaaditya问题的关键是,一旦你预先分配了矩阵,您需要将输出行写入(最初为零)矩阵的正确行,而不是继续追加行。@SchighSchagh:对。使用
A(i,:)=rowVec而不是
A=[A;rowVec](或者tumchaaditya正在做的任何事情)。