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
Walter Roberson 2020년 10월 23일
편집: Walter Roberson 2020년 10월 23일
You have a left-over value for data_struct in your workspace. Clear it, or better yet use a different variable name.
Suman Chatterjee
Suman Chatterjee 2020년 10월 23일
Walter Roberson could you please explain what is the meaning of the error "Subscripted assignment between dissimilar structures" .And how to avoid it.
Walter Roberson
Walter Roberson 2020년 10월 23일
Also note that in order to assign an entire struct into an existing struct array, the structure fields must be in exactly the same order between the two.
Suman Chatterjee
Suman Chatterjee 2020년 10월 23일
Can i save them in any other way. My objective is to save the individual struct for eact loop.
Walter Roberson
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
Nitin Kapgate 2020년 10월 28일

0 개 추천

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개)

카테고리

도움말 센터File Exchange에서 Structures에 대해 자세히 알아보기

제품

릴리스

R2020b

질문:

2020년 10월 23일

답변:

2020년 10월 28일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by