Extracting data from non-uniform levels in 3D array
1 view (last 30 days)
I have been trying to do this for a week and have had no hope. Maybe somebody has done it before and has some tips!
I have two 3-D arrays
Array "A": 207x177x18 array. It is a temperature data raster with 18 vertical levels.
Array "B": 207x177x18 array of zeros, with 1 values at the vertical level I am interested in for each raster point.
I want to use Array B as a mask for Array A, so that I get the 2D Matrix "C", a 207x177 raster with only the data from the vertical level I am interested in.
Any tips would be appreciated!!
Sean de Wolski on 12 Sep 2012
Edited: Sean de Wolski on 12 Sep 2012
Assuming that each row/col position of B has exactly one 1 throughout its depth, then this can be done like follows:
A = repmat(magic(10),[1 1 5]);
%Simulate a B where each row/col pair has exactly one true value through
B = false(size(A));
[~,idx] = max(rand(size(A)),,3);
[rr, cc] = ndgrid(1:size(A,1),1:size(A,2));
B(sub2ind(size(B),rr(:), cc(:), idx(:))) = true;
%Now, how do we undo the above?
[~,idx] = max(B,,3); %which page?
C =reshape(A(sub2ind(size(B),rr(:), cc(:), idx(:))),size(idx)); %rr/cc from above, reshape to original shape
And of course doc sub2ind will be your friend.