Retrieve data from a nested structure
Ältere Kommentare anzeigen
Hi,
I am looking for some help with extracting data from a nested structure. I have a structure like that shown below.

I can call a single value from the structure easily e.g data.prop(1).Area will give me the value of Area from the first prop structure.
I wish to extract easily all of a certain field, the only way I can currently do this is with a loop. For example I might wish to make an array with all of the Areas.
myData = data.prop(1:3).Area
However this doesn't work.
My current solution is to loop through the structure as follows:
for i = 1:length(data)
myData(i,1) = data.prop(i).Area
end
If there is a better way to achieve this I would be very interested. Thank you for the help
Antworten (2)
Martin Dale
am 8 Dez. 2021
% use a 2 stage process ( or more stages for a deeper nested structure)
tmp = [data.prop];
areas = [tmp.area];
Walter Roberson
am 19 Feb. 2018
myData = [data.prop.Area];
5 Kommentare
matheu Broom
am 19 Feb. 2018
Walter Roberson
am 19 Feb. 2018
You could get that error if you omitted the [] that I showed, or if data is not a scalar structure (but if data were not a scalar structure you would have received an error in your for loop version.)
Example:
N = 10;
data.prop = struct('Area', num2cell(rand(1,N)), 'Perimeter', num2cell(randi(50,1,N)), 'Centre', num2cell(rand(N,2),2).');
[data.prop.Area]
Guillaume
am 19 Feb. 2018
the substructure prop is a non-scalar structure. The [] extraction cannot work.
Unfortunately, the loop is the only option. That's one of the reason I dislike multilevel structures.
matheu Broom
am 19 Feb. 2018
N = 10;
data.prop = struct('Area', num2cell(rand(1,N)), 'Perimeter', num2cell(randi(50,1,N)), 'Centre', num2cell(rand(N,2),2).');
data.prop
[data.prop.Area]
You can see that my data.prop is a non-scalar structure and that it still works.
Kategorien
Mehr zu Loops and Conditional Statements finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!