我想创建一个结构数组,每个结构都有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
预分配我的结构数据数组的最佳方法是什么?
提前谢谢
答案 0 :(得分:1)
您可以预先分配几种方式:
在创建您想要结构数组的大小的结构时使用空单元格数组。
mystruct = struct('field1', cell(N_data, 1), ...
'field2', cell(N_data, 1), ...
'field3', cell(N_data, 1), ...
'field4', cell(N_data, 1));
只需指定" last" struct
数组中的元素将导致MATLAB创建所有其他structs
并使用[]
填充所有字段
mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ...
'field3', {'3'}, 'field4', {'4'});
创建"默认" struct并使用repmat
将其扩展为正确的大小。这将使所有structs
具有相同的(非[]
)字段,直到更改为止。
template.field1 = '1';
template.field2 = '2';
template.field3 = '3';
template.field4 = '4';
mystruct = repmat(template, [N_data, 1]);
在你的特定情况下,你可以做的一个类似于#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