在MATLAB中,如果我需要在每个循环中更改struct数组大小,如何提高效率?

时间:2014-07-17 07:58:31

标签: arrays matlab struct

场景是我需要从几个.mat文件加载结构数组形式的数据,并将它们组合成一个单独的数组以便以后处理。最初我做的是:

raw_data = [];
for i=1:length(file_name_list)
    raw_data = [raw_data importdata(file_name_list(i))];
end

然后MATLAB警告我:

The variable 'raw_data' appears to change size on every loop iteration. Consider preallocating for speed. 

如果我理解正确,当附加到数组时,MATLAB将重新分配一些空间并将所有原始元素复制到新位置,因此可能需要花费很多时间。但问题是,我事先并不知道文件中有多少结构,我不知道每个结构的大小。有没有办法加快这个过程?已经需要5秒钟来完成总共600个结构的2个文件(这非常慢)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

raw_data初始化为大小相当于.mat个文件数的单元格数组。

raw_data=cell(length(file_name_list),1);
for i=1:length(file_name_list)
    raw_data{i} = importdata(file_name_list(i));
end

这应该可以解决您的问题。