matlab的数组迭代保存到一个数组,数组 – MATLAB迭代地添加数组元素:时间行为...

所以我知道这不是推荐的技术(预分配更好),但我对这种计时行为非常好奇;我很好奇在引擎盖下会发生什么.

在我的脑海中,向数组中添加一个元素可能会在内存中引发一些不同的合理行为,具体取决于实现:(1)分摊,在链接列表中添加元素需要相同的时间来维护指针到最后一个元素,(2)它可能需要花费很长一段时间,然后预先分配足够的内存,比如,当前列表中的元素数量的两倍(如Java数组),(3)更聪明的东西比我能想到.

MATLAB似乎做了一些我不太满意的事情.偶尔出现峰值,成本似乎呈线性增长.它可能在做什么的任何猜测(或智能解释)?我平均模拟(我提交,可能会隐藏一些有趣的模式).

当您将一个元素迭代地添加到最初为空的列表的末尾时会发生这种情况.为什么线性增加?那些看似周期性的尖峰是否有一个很酷的原因?

2e0f2e269bfa9d26b70762c06c97759e.png

我用来生成它的代码:

% for averaging over

num_averages = 100000;

% number of simulations

num_sims = 10000;

% the time it takes to add one more item, array

time_store = nan(num_sims, num_averages);

% averaging count

for i = 1:num_averages

% an array that grows with every loop

building_array = [];

for j = 1:num_sims

tic;

building_array = [building_array 1];

time_store(j, i) = toc;

end

end

plot(mean(time_store, 2)); hold all;

xlabel('Element num'); ylabel('Time');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值