How to save struct data in for loop
54 次查看(过去 30 天)
显示 更早的评论
Hi,
I am working in a for loop where for each iteration I get a new structure data with 3 fields in all of them. How do I store all of these data points so that I could use them together? I tried working with the following format but I am getting the error "Subscripted assignment between dissimilar structures."
The m.get_data() returns a struct of three fields each containg 1024 values.
for i=1:10
data_struct(i)=m.get_data();
end
5 个评论
Walter Roberson
2020-10-23
Use dynamic structure names so your data_struct is a struct with multiple field names. Then use save() with the -struct option; that will create one variable name in the .mat file for each field name in the struct.
采纳的回答
Nitin Kapgate
2020-10-28
You can overcome the problem by pre-allocating the array of structures as follows:
clear all; % Clear the workspace
N = 10;
% Pre-allocate the array of structures
structArray1(N) = struct('field1',[], 'field2',[], 'field3',[]);
for i=1:N
field1 = "field1";
field2 = "field2";
field3 = "field3";
structArray1(i)=getStruct(field1, field2,field3);
end
Alternatively, instead of pre-allocating before the loop, you can also loop backwards so that all the memory allocation is done in the first iteration itself.
N = 10;
for i=N:-1:1
field1 = "field1";
field2 = "field2";
field3 = "field3";
structArray2(i)=getStruct(field1, field2,field3);
end
structArray2 = fliplr(structArray2); % Get back the array of structures in correct order
The getStruct function is as follows:
function outStruct = getStruct(field1, field2,field3)
% returns a struct with 3 fields
outStruct.field1 = field1;
outStruct.field2 = field2;
outStruct.field3 = field3;
end
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!