How do I find the location of the max value of a nd matrix efficiently?
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Shep Bryan
      
 el 22 de Feb. de 2020
  
    
    
    
    
    Respondida: Walter Roberson
      
      
 el 22 de Feb. de 2020
            How do I find the location of the maximum value of a nd matrix efficiently? Right now I am hard coding my search for up to 5 dimensions:
function out = maxi(X)
Ndim = length(size(X));
if Ndim == 2
    [a,b] = ind2sub(size(X), find(X==max(X,[],'all')));
    out   = [a,b];
elseif Ndim == 3
    [a,b,c] = ind2sub(size(X), find(X==max(X,[],'all')));
    out   = [a,b,c];
elseif Ndim == 4
    [a,b,c,d] = ind2sub(size(X), find(X==max(X,[],'all')));
    out   = [a,b,c,d];
elseif Ndim == 5
    [a,b,c,d,e] = ind2sub(size(X), find(X==max(X,[],'all')));
    out   = [a,b,c,d,e];
end
end
Is there a way to do this more efficiently and for arbitrary number of dimensions?
0 comentarios
Respuesta aceptada
  Walter Roberson
      
      
 el 22 de Feb. de 2020
        [L{1:ndims(X)}] = ind2sub(size(X), max(X, [], 'all')) ;
out = cell2mat(L);
However if you want all the duplicates to show up then you would still use find()
0 comentarios
Más respuestas (0)
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

