概述
到目前为止,使用repmat是预分配结构的最有效方法:
N = 10000;
b = repmat(struct('x',1), N, 1 );
使用Matlab 2011a,这比通过索引进行预分配要快10倍,例如
N = 10000;
b(N).x = 1
索引方法仅比不预先分配略快。
No preallocation: 0.075524
Preallocate Using indexing: 0.063774
Preallocate with repmat: 0.005234
下面的代码,以备您验证。
clear;
N = 10000;
%1) GROWING A STRUCT
tic;
for ii=1:N
a(ii).x(1)=1;
end
noPreAll = toc;
%2)PREALLOCATING A STRUCT
tic;
b = repmat( struct( 'x', 1 ), N, 1 );
for ii=1:N
b(ii).x(1)=1;
end;
repmatBased=toc;
%3)Index to preallocate
tic;
c(N).x = 1;
for ii=1:N
c(ii).x(1)=1;
end;
preIndex=toc;
disp(['No preallocation: ' num2str(noPreAll)])
disp(['Preallocate Indexing: ' num2str(preIndex)])
disp(['Preallocate with repmat: ' num2str(repmatBased)])
命令窗口中的结果:
No preallocation: 0.075524
Preallocate Indexing: 0.063774
Preallocate with repmat: 0.0052338
>>
附言 如果有人可以解释,我很想知道为什么会这样。
最后
以上就是单身芝麻为你收集整理的matlab 数组构造,如何在MATLAB中初始化结构数组?的全部内容,希望文章能够帮你解决matlab 数组构造,如何在MATLAB中初始化结构数组?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复