MATLAB Answers

How do I find the indices of the maximum (or minimum) value of my matrix?

조회 수: 14,644(최근 30일)
MathWorks Support Team
MathWorks Support Team 2009년 10월 7일
댓글: Peipei Zhai 2021년 3월 29일
The 'find' command only returns the indices of all the non-zero elements of a matrix. I would like to know how to find the indices of just the maximum (or minimum) value.

채택된 답변

MathWorks Support Team
MathWorks Support Team 2020년 11월 12일
편집: MathWorks Support Team 2020년 11월 12일
The "min" and "max" functions in MATLAB return the index of the minimum and maximum values, respectively, as an optional second output argument.
For example, the following code produces a row vector 'M' that contains the maximum value of each column of 'A', which is 3 for the first column and 4 for the second column. Additionally, 'I' is a row vector containing the row positions of 3 and 4, which are 2 and 2, since the maximums for both columns lie in the second row.
A = [1 2; 3 4];
[M,I] = max(A)
For more information on the 'min' and 'max' functions, see the documentation pages listed below:
To find the indices of all the locations where the maximum value (of the whole matrix) appears, you can use the "find" function.
maximum = max(max(A));
[x,y]=find(A==maximum)
  댓글 수: 4
Sergio Novi Junior
Sergio Novi Junior 2020년 6월 5일
Oscar, it will depend on your application. For example, suppose you are looking for a car with the highest final speed. You find that there are two cars that have the best results. You can choose the car with lowest price.

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

추가 답변(10개)

Shakir Kapra
Shakir Kapra 2015년 4월 20일
편집: Shakir Kapra 2015년 4월 20일
[M,I] = min(A)
where M - is the min value
and I - is index of the minimum value
Similarly it works for the max
  댓글 수: 3
Peipei Zhai
Peipei Zhai 2021년 3월 29일
in this way, how to save all the index of the minimum in a matrix?

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


Andrew Teixeira
Andrew Teixeira 2019년 10월 1일
How about just:
A = magic(5);
[Amins, idx] = min(A);
[Amin, Aj] = min(Amins);
Ai = idx(Aj);
where your final matrix minima is located at [Ai, Aj]


Juanith HL
Juanith HL 2019년 10월 8일
A = [8 2 4; 7 3 9]
[M,I] = max(A(:)) %I is the index maximun Here tu can change the function to max or min
[I_row, I_col] = ind2sub(size(A),I) %I_row is the row index and I_col is the column index
  댓글 수: 1
Martin Grden
Martin Grden 2020년 10월 12일
Like this one best. It should be more efficient than those traversing the matrix two times.

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


ANKUR KUMAR
ANKUR KUMAR 2017년 9월 19일
Use this as a function and type [x,y]=minmat(A) to get the location of the minimum of matrix. for example:
>> A=magic(5)
>> [a,b]=minmat(A)
a =
1
b =
3
Save this as a function in your base folder and use it.
function [ a,b ] = minmat( c )
as=size(c);
total_ele=numel(c);
[~,I]=min(c(:));
r=rem(I,as(1));
a=r;
b=((I-a)/as(1))+1;
if a==0
a=as(1);
b=b-1;
else
a=r;
b=b;
end
end
  댓글 수: 4
Steven Lord
Steven Lord 2020년 9월 6일
Once you've stored this code in a file named minmat.m (see this documentation page for the basics of defining a function) you can call this like any other MATLAB function (as shown on this other documentation page.)

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


Roos
Roos 2018년 5월 10일
편집: Roos 2018년 5월 10일
https://www.mathworks.com/matlabcentral/answers/100813-how-do-i-find-the-indices-of-the-maximum-or-minimum-value-of-my-matrix#answer_282157
This apparently solved your question, however for future reference I would like to mention that there is an earier solution that does not involve declaring a function.
Lets continue with any matrix A. The first step is finding the minimum value of the complete matrix with:
minimum=min(min(A));
The double min is needed to first find min of all columns, then find min of all those min values. (there might be an easier way for this as well).
Finding the indices of this value can be done like this:
[x,y]=find(A=minimum);
2 lines will be easier than a complete function.
  댓글 수: 2
Stanley Tam
Stanley Tam 2020년 10월 16일
Above: [x,y]=find(A=minimum);
"=" should be replaced with "==", i.e. [x,y]=find(A == minimum);

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


Konstantinos Fragkakis
Konstantinos Fragkakis 2018년 8월 27일
편집: Konstantinos Fragkakis 2018년 8월 27일
Function to calculate the minimum value and its indices, in a multidimensional array - In order to find the max, just replace the min(array(:)) statement with max(array(:)).
function [ minimum,index ] = minmat( array )
% Function: Calculate the minimum value and its indices in a multidimensional array
% -------- Logic description --------
% First of all, identify the Matlab convention for numbering the elements of a multi-dimensional array.
% First are all the elements for the first dimension
% Then the ones for the second and so on
% In each iteration, divide the number that identifies the minimum with the dimension under investigation
% The remainder is the Index for this dimension (check for special cases below)
% The integer is the "New number" that identifies the minimum, to be used for the next loop
% Repeat the steps as many times as the number of dimensions (e.g for a 2-by-3-by-4-by-5 table, repeat 4 times)
neldim = size(array); % Length of each dimension
ndim = length(neldim); % Number of dimensions
[minimum,I] = min(array(:));
remaining = 1; % Counter to evaluate the end of dimensions
index = []; % Initialize index
while remaining~=ndim+1 % Break after the loop for the last dimension has been evaluated
% Divide the integer with the the value of each dimension --> Identify at which group the integer belongs
r = rem(I,neldim(remaining)); % The remainder identifies the index for the dimension under evaluation
int = fix(I/neldim(remaining)); % The integer is the number that has to be used for the next iteration
if r == 0 % Compensate for being the last element of a "group" --> It index is equal to the dimension under evaluation
new_index = neldim(remaining);
else % Compensate for the number of group --> Increase by 1 (e.g if remainder 8/3 = 2 and integer = 2, it means that you are at the 2+1 group in the 2nd position)
int = int+1;
new_index = r;
end
I = int; % Adjust the new number for the division. This is the group th
index = [index new_index]; % Append the current index at the end
remaining = remaining + 1;
end
end
  댓글 수: 1
Ammaa AlSada
Ammaa AlSada 2018년 12월 15일
find the min(or max) of the 2nd row of an unkown matrix?
how to solve it

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


SHIVAM SUNDRIYAL
SHIVAM SUNDRIYAL 2020년 5월 18일
[M,I] = max(___) returns the index into the operating dimension that corresponds to the maximum value of A for any of the previous syntaxes.
Here M will represent and hold the maximum value while Iwill hold the index of the maximum value
you can use the same method to find the minimum value and its index by using the min() functiobn
Example :
A = [1 9 -2; 8 4 -5]
[M,I] = max(A)
Output:
M = 1×3
8 9 -2
I = 1×3
2 1 1

Samar Shahin
Samar Shahin 2020년 5월 2일
[row,col]=find( matrix_name == min(matrix_name)) returns the indices of the minimum value in each coloumn in your matrix

Hazoor Ahmad
Hazoor Ahmad 2021년 2월 28일
편집: Hazoor Ahmad 2021년 2월 28일
A = randi(45,5)
[mr,mir] = min(A)
[mc,mic] = min(mr)
[mir(mic), mic]

Community Treasure Hunt

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

Start Hunting!

Translated by