MATLAB:如何分配结构数据数组

MATLAB: how to allocate an array of structure data

我想创建一个结构数组,每个结构都有 4 个字段,这些字段将是一个未指定长度的数组。

my_struct_data.field1=a;
my_struct_data.field2=b;
my_struct_data.field3=c;
my_struct_data.field4=d;

事实上,我正计划将已经以结构格式加载的数据插入到此数组中。

for j:1:N_data

    my_struct_data=load([my_file_name '_' j]);

    my_array_list(j)=my_struct_data;

end

预分配我的结构数据数组的最佳方法是什么?

提前致谢

您可以通过以下几种方式进行预分配:

  1. 在创建结构时使用空元胞数组,该结构的大小符合您希望结构数组的大小。

    mystruct = struct('field1', cell(N_data, 1), ...
                      'field2', cell(N_data, 1), ...
                      'field3', cell(N_data, 1), ...
                      'field4', cell(N_data, 1));
    
  2. 只需在 struct 数组中分配 "last" 元素,这将导致 MATLAB 创建所有其他 structs 并使用 [] 填充所有字段

    mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ...
                                 'field3', {'3'}, 'field4', {'4'});
    
  3. 创建一个 "default" 结构并使用 repmat 将其扩展到合适的大小。这将使所有 structs 具有相同的(非 [])字段,直到更改。

    template.field1 = '1';
    template.field2 = '2';
    template.field3 = '3';
    template.field4 = '4';
    
    mystruct = repmat(template, [N_data, 1]);
    

在你的具体情况下,你可以做一个类似于#2 的小技巧,就是简单地反转 for 循环的顺序,以便首先填充结构数组的最后一个元素。这将在第一次循环时自动预分配所有内容。

for k = flip(1:N_data)
    my_struct_data = load([my_file_name '_' num2str(k)]);
    my_array_list(k) = my_struct_data;
end