Use multidimensional Indices returned by max to get values from another array of same size
Show older comments
I have a three dimensional array and I find the maximum value and indices of these values along the third dimension. How do I use these indices to find the values at the corresponding locations in another array of the same dimensions,
For example:
x = randn(5,10,20)
[xmax,ixmax]=max(x,[],3);
% ixmax is a 5 x 10 array that has the indices of the maxima along the third dimension of x
y = randn(5,10,20);
% I want to find the values of y at the locations of the maxima of x
% I can of course do it by looping
for ii = 1:5
for jj = 1:10
yxmax(ii,jj)=y(ii,jj,ixmax(ii,jj));
end
end
How do I do this without looping?
Accepted Answer
More Answers (1)
Walter Roberson
on 10 Jan 2020
When you max() a 3d array along the third dimension, the 2d second output, Index, indexed at J, K is such that Array(J, K, Index(J, K)) is the location of a maximum.
You can construct
[Jgrid, Kgrid] = ndgrid(1:size(Array, 1),1:size(Array, 2));
linidx = sub2ind(size(Array), Jgrid, Kgrid, Index)) ;
And then OtherArry(linidx)
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!