登录论坛

查看完整版本 : 在MATLAB中预分配数组的替代方法是什么?


poster
2019-12-10, 20:48
可能重复:
MATLAB中的可增长数据结构 (https://stackoverflow.com/questions/2625048/growable-data-structure-in-matlab)

因此,在当前的MATLAB脚本中,我有一个很大的不确定大小的增长数组。目前,我对此无能为力,因为如果我实际进行预分配,它将需要的内存比需要的多很多倍(最大可能值的数量是每个像素640,但通常是2左右) 5)。

通常在这种情况下,我会在C ++或类似的东西中使用向量,其中向量相对于给定的容量呈指数增长。但是我认为Matlab中的矩阵开始分裂的速度比目标驱动的C ++向量快得多。

你们认为什么是类似这样的最佳选择?还是我应该坚持使用普通数组,并希望依次添加大约100k个元素可以工作?

提前致谢。



回答:

您可以尝试在重新分配元素时std::vector做什么---每次填充时将其容量加倍,摊销成本为O(1) 。

测试:

function test_MAT_vector LIM = 5e4; %%# Normal tic; A = zeros(1,1); for i = 1:LIM A(end+1) = i; end toc %%# std::vector clone tic; B = zeros(1,1); for i = 1:LIM if(i > numel(B)) B = ; end B(i) = i; end toc end [B]输出:

经过的时间是3.489820秒。

经过的时间是0.006710秒。

使用细胞

%%# cell tic; A = cell(1,1); for i = 1:LIM A(end+1) = {i}; end toc 经过的时间是2.740792秒。



更多&回答... (https://stackoverflow.com/questions/3251232)