Logical indexing in multidimensional array

9 views (last 30 days)
J B
J B on 9 Feb 2021
Edited: Jan on 10 Feb 2021
I have a 4-dimensional array and would like to replace parts of it with NaN values. The array has dimensions 60 x 321 x 28 x 16, the first three dimensions are some parameters I iterated through, the last dimension is the actual results I obtained. I would now like to replace some of the results, depending on the value of one of the elements from the results. I tried this:
res = % some 4D array (60 x 231 x 28 x 16)
res(res(:,:,:,9) > 5, 4:16) = NaN; % Fail
What I want to obtain would be something like this:
for x=1:60
for y=1:321
for z=1:28
if res(x,y,z,9) > 5
res(x,y,z,4:16) = NaN;
end
end
end
end
Is there a more compact way of writing this?
  1 Comment
Jan
Jan on 9 Feb 2021
Edited: Jan on 10 Feb 2021
This is a good question. To my surprise I did not even find a built-in function for this. I'd expect a function for masking [M x N x 3] arrays (RGB-images) in the image processing toolbox.

Sign in to comment.

Answers (1)

Matt J
Matt J on 9 Feb 2021
Edited: Matt J on 9 Feb 2021
T=reshape(res,[],16);
T(T(:,9)>5,4:16)=nan;
res=reshape(T,size(res));

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!