How do I find the location of the max value of a nd matrix efficiently?

1 次查看(过去 30 天)
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?

采纳的回答

Walter Roberson
Walter Roberson 2020-2-22
[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 个)

类别

Help CenterFile Exchange 中查找有关 Data Types 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by