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
预分配我的结构数据数组的最佳方法是什么?
提前致谢
您可以通过以下几种方式进行预分配:
在创建结构时使用空元胞数组,该结构的大小符合您希望结构数组的大小。
mystruct = struct('field1', cell(N_data, 1), ...
'field2', cell(N_data, 1), ...
'field3', cell(N_data, 1), ...
'field4', cell(N_data, 1));
只需在 struct
数组中分配 "last" 元素,这将导致 MATLAB 创建所有其他 structs
并使用 []
填充所有字段
mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ...
'field3', {'3'}, 'field4', {'4'});
创建一个 "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
我想创建一个结构数组,每个结构都有 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
预分配我的结构数据数组的最佳方法是什么?
提前致谢
您可以通过以下几种方式进行预分配:
在创建结构时使用空元胞数组,该结构的大小符合您希望结构数组的大小。
mystruct = struct('field1', cell(N_data, 1), ... 'field2', cell(N_data, 1), ... 'field3', cell(N_data, 1), ... 'field4', cell(N_data, 1));
只需在
struct
数组中分配 "last" 元素,这将导致 MATLAB 创建所有其他structs
并使用[]
填充所有字段mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ... 'field3', {'3'}, 'field4', {'4'});
创建一个 "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