5,937 views (last 30 days)

Show older comments

Let me have a 3X3 matrix

6 8 9

7 10 11

21 22 8

How to find the maximum value from this matrix?

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)

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(:));

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);

Azzi Abdelmalek
on 5 Sep 2012

max(max(A))

Jonathan Posada
on 20 Feb 2016

Tom
on 28 Jan 2020

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);

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

Jenkins Paul Samuel J
on 6 Feb 2021

or you can use,

M = max(max(A));

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.)

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

Start Hunting!