Iterating through a structure

I am trying to create a mask using by 168x1 struct but whenever i run the code i get this error - Expected one output from a curly brace or dot indexing expression, but there were 168 results.
Is there a way i can iterate through the structure and create a mask out of these fields.
Any help is appreciated
[x,y] = pixcenters(R);
[X,Y] = meshgrid(x,y);
names = fieldnames(S);
no_afr_stru = cell2struct(filt_nonaf_country,names,1);
fn = fieldnames(no_afr_stru);
rx = no_afr_stru.X(1:end-1);
ry = no_afr_stru.Y(1:end-1);
mask = inpolygon(X,Y,rx,ry);

2 Comments

Please provide more details so that everyone can reproduce your error. For starters, what are X, Y, rx and ry? can you provide an example?
X & Y are the points from my geotiff file and rx and ry are the points from the countries which i want to mask on my tiff file. as my struct no_afr_stru is 168x1 i want to iterate over all 168 lines in the structure and apply them all to the mask. Hope this helps!

Sign in to comment.

 Accepted Answer

You can index a struct in a loop:
rx = no_afr_stru(n).X(1:end-1);
ry = no_afr_stru(n).Y(1:end-1);

More Answers (1)

Ive J
Ive J on 13 Dec 2020
Edited: Ive J on 13 Dec 2020
Try this:
mask = arrayfun(@(x)inpolygon(X, Y, x.X, x.Y), no_afr_stru, 'UniformOutput', false);

2 Comments

I suspect the goal is to create a single mask, which would be easier with a loop. Also, arrayfun will have an overhead.
you would be correct there sorry i should have specified

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Asked:

on 12 Dec 2020

Commented:

on 13 Dec 2020

Community Treasure Hunt

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

Start Hunting!