MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   在MATLAB中预分配数组的替代方法是什么? (https://www.labfans.com/bbs/showthread.php?t=23697)

poster 2019-12-10 20:48

在MATLAB中预分配数组的替代方法是什么?
 
[INDENT] [B]可能重复:[/B]
[URL="https://stackoverflow.com/questions/2625048/growable-data-structure-in-matlab"]MATLAB中的可增长数据结构[/URL]

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

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

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

提前致谢。



[B]回答:[/B]

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

[B]测试: [/B]

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 [B]输出: [/B]
[INDENT]经过的时间是3.489820秒。

经过的时间是0.006710秒。

[/INDENT][B]使用细胞[/B]

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

[/INDENT]
[url=https://stackoverflow.com/questions/3251232]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 23:33

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.