Logical indexing in multidimensional array

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

Jan
Jan 2021년 2월 9일
편집: Jan 2021년 2월 10일
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.

댓글을 달려면 로그인하십시오.

답변 (1개)

Matt J
Matt J 2021년 2월 9일
편집: Matt J 2021년 2월 9일

1 개 추천

T=reshape(res,[],16);
T(T(:,9)>5,4:16)=nan;
res=reshape(T,size(res));

카테고리

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

제품

릴리스

R2018b

질문:

J B
2021년 2월 9일

편집:

Jan
2021년 2월 10일

Community Treasure Hunt

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

Start Hunting!

Translated by