关于matlab中struct增长的优化

本文通过对比MATLAB中struct的行增长和列增长速度,发现在结构体包含多个field时,列增长速度显著优于行增长。作者提供了一段测试代码展示两者在相同条件下运行时间的巨大差距,提出这种现象可能与MATLAB的内存申请机制有关,但具体原因未深入探究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在平时编写matlab代码进行实验,偶然间发现matlab结构进行行增长或者列增长速度差异较大,选择列增长能够很大程度上提速。
为了进一步验证,就写了一段demo程序测试:

n = 100000;


fprintf('row grow ... \n');
tic;
temp = struct;
for i = 1 : n
    temp(i, 1).Str = 'aaaa';
    temp(i, 1).Count = i;
end
toc;


fprintf('column grow ... \n');
tic;
temp = struct;
for i = 1 : n
    temp(i).Str = 'aaaa'; % temp(1, i).Str = 'aaaa';
    temp(i).Count = i; % temp(1, i).Count = i;
end
toc;

机器配置就是普通台式机,运行结果如下所示,运行时间相差100+倍:
row grow ... 
Elapsed time is 34.328403 seconds.
column grow ... 
Elapsed time is 0.292414 seconds.

在上面的demo代码中,你可以发现,struct里有两个field,这是因为我在测试速度时发现,如果struct只有一个field,行增长和列增长速度上并不会相差很多,但是当有两个及以上的field,差别就体现出来了

另外,对于上面的demo代码,并不是struct的两个域非得一个是string,一个是double,如果修改成下面的代码依然可以得出相似的结果:

两个域都是string

temp(i, 1).Str = 'aaaa';
temp(i, 1).Str2 = 'bbbb';

两个域都是double
temp(i, 1).Count = i;
temp(i, 1).Count2 = i;

关于为啥会出现这种现象,个人觉得应该是matlab内存申请机制导致的吧,具体是什么机制,没深入研究,有兴趣的可以去倒腾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值