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

1 回表示 (過去 30 日間)
Shep Bryan
Shep Bryan 2020 年 2 月 22 日
回答済み: Walter Roberson 2020 年 2 月 22 日
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 Center および File ExchangeData Types についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by