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

时间:2016-06-13 13:03:13

标签: arrays matlab data-structures allocation

我想创建一个结构数组,每个结构都有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 个答案:

答案 0 :(得分:1)

您可以预先分配几种方式:

  1. 在创建您想要结构数组的大小的结构时使用空单元格数组。

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

    mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ...
                                 'field3', {'3'}, 'field4', {'4'});
    
  3. 创建"默认" struct并使用repmat将其扩展为正确的大小。这将使所有structs具有相同的(非[])字段,直到更改为止。

    template.field1 = '1';
    template.field2 = '2';
    template.field3 = '3';
    template.field4 = '4';
    
    mystruct = repmat(template, [N_data, 1]);
    
  4. 在你的特定情况下,你可以做的一个类似于#2的小技巧就是简单地反转你的for循环的顺序,这样你就可以先填充struct数组的最后一个元素。这将在第一次循环时自动预先分配所有内容。

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