Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中预分配数组的替代方法是什么?

可能重复:
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秒。

更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



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


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