Return the indices of max value in a possible 4D array

I'm trying to get the indices of a max value from a 4 dimension array, that can actually reduce in dimension, so I can display this value and some the value of some other variables at one or more of the same indices. I used something like this:
MAX = find(sx == max(sx(:)));
if MAX/(kk*qq*zz) > 1
rmax = floor(MAX/(kk*qq*zz)) + 1;
MAX = MAX - (kk*qq*zz) * (rmax - 1);
else
if length(theta) == 1
rmax = 0;
rmax = 1;
end
if MAX/(kk*qq) > 1
zmax = floor(MAX/(kk*qq)) + 1;
MAX = MAX - (kk*qq) * (zmax - 1);
else
zmax = 1;
end
if MAX/kk > 1
qmax = floor(MAX/kk) + 1;
MAX = MAX - (kk) * (qmax - 1);
else
qmax = 1;
end
kmax = MAX;
smax = sx(kmax, qmax, zmax, rmax);
but if the array size changes it still wants to output smax as a 4 dimensional array except its not so I get an error.
Is there any function in Matlab for getting these indices?

 Respuesta aceptada

Andrew Newell
Andrew Newell el 20 de Feb. de 2015
Editada: Andrew Newell el 20 de Feb. de 2015
If you don't know in advance the size of the array, you can create a cell array for the indices with as many elements as there are dimensions:
[MAX,I] = max(sx(:));
dims = size(sx);
smax = cell(size(dims));
[smax{:}] = ind2sub(dims,I);

3 comentarios

Stephen23
Stephen23 el 20 de Feb. de 2015
Editada: Stephen23 el 20 de Feb. de 2015
As an alternative to preallocating a cell array to collect the outputs into, you can rewrite ind2sub or use one of the versions on MATLAB File Exchange that have already done this:
Which lets you use
subs = ind2subvect(size(sx),I);
That would be more transparent. My code is rather cryptic.
Thank you so much. Ind2sub worked on its own. It's a varargout function and it has an if statement for putting ones in empty dimensions. Since I know the max dimension I'll have, it worked. Thanks again.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 20 de Feb. de 2015

Comentada:

el 20 de Feb. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by