To find the maximum value in a matrix?
2,219 views (last 30 days)
Show older comments
Sabarinathan Vadivelu
on 5 Sep 2012
Answered: Sneha Baranwal
on 16 Aug 2021
Let me have a 3X3 matrix
6 8 9
7 10 11
21 22 8
How to find the maximum value from this matrix?
2 Comments
KHOIROM Motilal
on 17 Mar 2016
Edited: KHOIROM Motilal
on 17 Mar 2016
- clc
- close all
- clear all
- X=[99 67 65;
- 63 62 61;
- 41 40 9];
- MAX=X(1,1);
- for i=1:3
- for j=1:3
- if MAX<= X(i,j);
- MAX=X(i,j);
- end
- end
- end
- disp(MAX)
Accepted Answer
Michael Völker
on 5 Sep 2012
Edited: Steven Lord
on 25 Mar 2020
Starting in R2018b, you can use the following command to find the maximum over all elements in an array A:
M = max(A, [], 'all');
For previous releases, use:
M = max(A(:));
1 Comment
Image Analyst
on 5 Sep 2012
To get it's location as well, accept both outputs of max:
[maxValue, linearIndexesOfMaxes] = max(A(:));
Note that there can be the max value at more than one location. To get the rows and columns (instead of linear indexes), you can use ind2subs() or find():
[rowsOfMaxes colsOfMaxes] = find(A == maxValue);
More Answers (6)
Azzi Abdelmalek
on 5 Sep 2012
max(max(A))
3 Comments
Jonathan Posada
on 20 Feb 2016
This works for the 2D case but if ndims(A)>2, then max(max(A)) will return a matrix. I believe OP wants the maximum element along all dimensions
Tom
on 28 Jan 2020
2 Comments
Steven Lord
on 25 Mar 2020
The [] as the second input is required when you want to specify a dimension, including 'all'. The function call max(A, 'all') only works if A and 'all' are compatibly sized.
>> max(1:3, 'all')
ans =
97 108 108
>> max(1:3, [], 'all')
ans =
3
Dmaldo01
on 22 Apr 2016
Edited: Dmaldo01
on 22 Apr 2016
This will work for all dimensions. If more efficient than ind2sub for less than 16000 elements.
[M,Index] = maxEl(MatVar)
index = size(MatVar);
Index = index*0;
M = max(MatVar(:));
A = find(MatVar==max(MatVar(:)),1);
for i = 1:length(index)
Index(i) = mod(ceil(A),index(i));
A = A/index(i);
end
Index(Index==0)=index(Index==0);
0 Comments
Yokesh
on 16 May 2019
If matrix dimension is 'n', then max element can be found by:
max(max(.....maxn^2((A))...)
We have to include n^2 times max
2 Comments
JPS
on 6 Feb 2021
or you can use,
M = max(max(A));
2 Comments
Walter Roberson
on 15 Mar 2021
A = [1 3 2 5; 7 9 12 8; 12 8 9 0]
[best3, best3idx] = maxk(A(:),3)
The three maximum values are 12, 12, and 9, not 12, 9, and 8. If you are interested in the three maximum unique values, then you need to explicitly take into account that some values occur more than once.
k = 3;
uA = unique(A, 'sorted');
nresults = min(length(uA), k);
results = cell(nresults, 1);
for K = 1 : k
this_max = uA(end-K+1);
results{K,1} = this_max;
results{K,2} = find(A==this_max).';
end
disp(results)
The output is a cell array, in which the first column gives you the value that is the maximum, and the second column gives you all the linear indices into the array. The code could be modified to give row and column outputs instead without much change.
The code does not assume that the number of occurrences is the same for each of the values (if that were known to be true then a numeric array could be created instead of a cell array.)
Sneha Baranwal
on 16 Aug 2021
k = 3;
uA = unique(A, 'sorted');
nresults = min(length(uA), k);
results = cell(nresults, 1);
for K = 1 : k
this_max = uA(end-K+1);
results{K,1} = this_max;
results{K,2} = find(A==this_max).';
end
disp(results)
0 Comments
See Also
Categories
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!