可能重复:
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 = [B;zeros(numel(B),1)]; end B(i) = i; end toc end
输出:
经过的时间是3.489820秒。
经过的时间是0.006710秒。
使用细胞
%%# cell tic; A = cell(1,1); for i = 1:LIM A(end+1) = {i}; end toc
经过的时间是2.740792秒。
更多&回答...