Use ndgrid
to generate the values along dimensions 1 and 3, and then sub2ind
to combine the three indices into a linear index:
[~, jj] = max(abs(mat),[],2); %// jj: returned by max
[ii, ~, kk] = ndgrid(1:size(mat,1),1,1:size(mat,3)); %// ii, kk: all combinations
result = mat(sub2ind(size(mat), ii, jj, kk));
A fancier, one-line alternative:
result = max(complex(mat),[],2);
This works because, acccording to max
documentation,
For complex input A, max returns the complex number with the largest complex modulus (magnitude), computed with max(abs(A)).