Получить местоположение максимума внутри 3D матрицы - PullRequest
0 голосов
/ 29 апреля 2020

Как я могу получить максимум трехмерной матрицы (которая ранее была двумерной и преобразована в трехмерную матрицу с помощью reshape) в MATLAB, чтобы я мог затем получить положение этого максимального значения в матрица?

Я написал следующий код, но, к сожалению, размеры, полученные для максимальных значений, больше размеров матрицы.

mxshirin=max(max(frvrdin))

[X,Y,Z]=size(frvrdin)
[o,i]=find(frvrdin==mxshirin)
xo=size(o)
xi=size(i)

1 Ответ

0 голосов
/ 29 апреля 2020

Если frvrdin - это 3D, max(max(frvrdin)) будет вектором 1x1x3:

frvrdin = rand(3,3,3);
max(max(frvrdin))
ans(:,:,1) =
    0.8235
ans(:,:,2) =
    0.9502
ans(:,:,3) =
    0.7547

Не вкладывайте max() функции, просто используйте переключатель 'all', чтобы получить максимум из вся матрица за раз.

max(frvrdin,[],'all')
ans =
    0.9340

Если вы используете более старую MATLAB, используйте выравнивание столбцов: max(frvrdin(:)).

Вы не можете использовать автоматический вывод местоположения max [val,idx]=max() в более чем двух измерениях, поэтому используйте find и ind2sub:

frvrdin = rand(3,3,3);
val = max(frvrdin,[],'all');  % Find maximum over all dims
idx = find(abs(frvrdin-val)<1e-10); % Compare within tolerance
[row,col,page] = ind2sub(size(frvrdin),idx);  % Get subscript indices

, где row - индекс вашего первого измерение, col во второй и, наконец, page в третий.

...