Indexing a 4-D array using a logical matrix
Mostra commenti meno recenti
Hello, I have a few 4-D arrays, originally netCDF files, which represent mapping data. Each 4-D array, or map, is lat x lon x percentile x frequency. I have the actual lat, lon, percentile, and frequency values sorted as seperate vectors.
Each map is actually 1144 x 1051 x 7 x 3, so for practice:
map=rand(1144,1051,7,3)
I have a polygon I want to subset the data by, and I have created an index by:
eez=shaperead('./ShapeFiles/eez/eez.shp');
lat = ncread(ncfile, '/lat');
lon = ncread(ncfile, '/lon');
[LonGrid, LatGrid] = meshgrid(lon, lat); %make a grid with the latlongs
Y=eez.Y(~isnan(eez.Y))'; %removing NAs and transposing the array
X=eez.X(~isnan(eez.X))';
inPoly = inpolygon(LonGrid, LatGrid,X,Y);
How do I use the inPoly logical to subset the 4-D map, just for the lat/lon, but apply it equally to all other dimensions (percentile/frequency), so I have a resulting 4-D array with the subsetted data? If I just index it by:
test=map(inPoly);
It returns an array that I am unsure how to apply to the original 4-D matrix. Ideally, it would return a 4D matrix with NaNs outside of the polygon.
Thanks in advance!
2 Commenti
How do I use the inPoly logical to subset the 4-D map, just for the lat/lon, but apply it equally to all other dimensions (percentile/frequency), so I have a resulting 4-D array with the subsetted data
It is not clear why you would expect a 4-D array, rather than a 3-D array, as a result. When you extract the interior pixels of an arbitrary polygon, the pixels do not have any natural rectangular shape, and must be organized as a 1D list.
Emily T. Griffiths
il 13 Ott 2025
Risposta accettata
Più risposte (0)
Categorie
Scopri di più su Elementary Polygons in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!