Home > other >  How to extract diagonal slices from a 3D array in matlab
How to extract diagonal slices from a 3D array in matlab

Time:12-03

My question might be trivial. I have a large 3D matrix (m by n by k elements) in MatLab and want to extract all diagonal slices and store them in another 3D array. For a better representation, I have attached a picture. the dashed lines are the diagonal slices I am looking for.

enter image description here

CodePudding user response:

Given a m x n x k array a use the following method to extract the slices into a cell array:

idx = repmat(reshape((0 : k - 1), 1, 1,[]) (1 : n), [m, 1, 1]);
result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});

The slices have dimensions [m x 1 x y] where y ranges from 1 to min(n,k).

For old MATLAB versions use the following (bsxfun instead of implicit expansion):

idx = repmat(bsxfun(@plus, reshape((0 : k - 1), 1, 1,[]), (1 : n)), [m, 1, 1]);
result = accumarray(idx(:), a(:), [], @(x){reshape(x, m, 1,[])});
  • Related