Get max value and index of multidimensional array
316 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
hello
i have an output value matrix depending on 3 inputs ranging from p10 to p11 , p20 to p21, p30 to p31. the output matrix is multidimensional depending on number of inputs. i want to write a function that gives the max value and its coordinates so to speak of the max value. matlabs max function only does 1 dimension.
any help would be grateful. thank you
0 Commenti
Risposte (4)
ChristianW
il 13 Feb 2013
Use 1D-Indexing:
M = randn(10,10,10,10);
[C,I] = max(M(:));
C
M(I)
This might be useful too:
[I1,I2,I3,I4] = ind2sub(size(M),I);
M(I1,I2,I3,I4)
2 Commenti
Nathan White
il 25 Mag 2017
I tried using this myself, but I'm not understanding how to do it. I have a 10 x 10 x 10 matrix and I need to find which row, column and page gives the max value. Could you clarify a little more what you did here? Thanks.
David McMahon
il 11 Gen 2022
Modificato: David McMahon
il 11 Gen 2022
Using more modern versions of Matlab, I found a simple solution that works for any size of matrix:
In the case of, say, 3D:
[M,I] = max(A,[],"all","linear");
[dim1, dim2, dim3] = ind2sub(size(A),I)
1 Commento
Steven Lord
il 12 Gen 2022
To generalize the last line:
% Sample data
nd = randi([2 10]); % random integer between 2 and 10
sz = randi(4, 1, nd) % vector of nd integers representing size(A)
A = randi([-10 10], sz); % random array
% Your first line
[maxValue, maxInd] = max(A, [], "all", "linear")
% Allocate a cell array to contain the subscript indices
d = cell(1, ndims(A));
% Use the cell array as a comma-separated list to hold the indices
[d{:}] = ind2sub(size(A), maxInd)
% Convert the subscript indices back into a linear index
checkInd = sub2ind(size(A), d{:})
% Use the subscript indices to get the element from A
checkValue = A(d{:})
Youssef Khmou
il 13 Feb 2013
Modificato: Youssef Khmou
il 13 Feb 2013
Hi, try this function
function [Max,index] =Max3d(x)
N=size(x);
if length(N)<3
error(' Input 3D array');
end
[a,t]=max(x(:));
Max=a;
index1=ceil(t/(N(1)*N(2)));
%Now we find the slice that contains the Max
Temp=x(:,:,index1);
[index2,index3]=find(Temp==max(Temp(:)));
index=[index2;index3;index1]';
6 Commenti
Youssef Khmou
il 13 Feb 2013
ChrsitanW : please try the function and see if is it the same approach/ answer you gave or not .
Of course it also uses max(G(:)) but from there, you can find z coor, then x and y using built-in functions "ceil" and "find" .
ChristianW
il 13 Feb 2013
Eheh, yeah its the same, but ind2sub is a validated function working for all dimensions. But its fine, your approach can be useful for someone.
Anxo Tato
il 12 Feb 2018
Modificato: Anxo Tato
il 12 Feb 2018
For a 2-D matrix this code can help. It calculates the indices (row and column) of the maximum (value) of a matrix A. Attention: It doesn't deal with multiple maximums!
function [row,column,value] = max_matrix(A)
[y,in] = max(A);
[value,column] = max(y);
[~,row] = max(A(:,column));
end
1 Commento
Mohammad Torabi
il 27 Lug 2021
Modificato: Mohammad Torabi
il 27 Lug 2021
Good, I found an easier way to get column:
[value,column] = max(max(A));
[~,row] = max(A(:,column));
Vedere anche
Categorie
Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!