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

조회 수: 2 (최근 30일)
Samuel Mustapha
Samuel Mustapha 2015년 2월 20일
댓글: Samuel Mustapha 2015년 2월 20일
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?

채택된 답변

Andrew Newell
Andrew Newell 2015년 2월 20일
편집: Andrew Newell 2015년 2월 20일
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
Andrew Newell
Andrew Newell 2015년 2월 20일
That would be more transparent. My code is rather cryptic.
Samuel Mustapha
Samuel Mustapha 2015년 2월 20일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by