To find the maximum value in a matrix?

조회 수: 2,723(최근 30일)
Sabarinathan Vadivelu
Sabarinathan Vadivelu 2012년 9월 5일
댓글: Steven Lord 2022년 12월 11일
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
KHOIROM Motilal
KHOIROM Motilal 2016년 3월 17일
편집: KHOIROM Motilal 2016년 3월 17일
  • 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
Michael Völker 2012년 9월 5일
편집: Steven Lord 2020년 3월 25일
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(:));
  댓글 수: 4
Steven Lord
Steven Lord 2022년 12월 11일
The max function's first two inputs are the two matrices whose values you want to compare. If you only want to compute the maximum of one matrix, you need something to use as a placeholder for that second matrix. Otherwise if you wrote something like this, are you asking for the maximum of the elements of a matrix and the value 1 or are you asking for the maximum along the 1st dimension?
max(A, 1)
To break that ambiguity, that syntax is interpreted as the former (the maximum of the elements of A and the value 1) while the following is the latter (the maximum along the 1st dimension.)
max(A, [], 1)

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

추가 답변(5개)

Azzi Abdelmalek
Azzi Abdelmalek 2012년 9월 5일
max(max(A))
  댓글 수: 4
DGM
DGM 2022년 12월 11일
Not that this is a good idea, but for an arbitrary number of dimensions:
A = rand(100,100,100,10); % a fairly large ND array
% find global maximum of A
maxval = max(A);
for n = 2:ndims(A)
maxval = max(maxval);
end
maxval
maxval = 1.0000
It hasn't been so for quite some time, but in my experience, this iterative approach had a significant speed advantage with larger N-D arrays in older versions (2x-3x as fast as max(A(:)) for the arrays I was using). I don't remember if that advantage still existed in R2012x, but it did in R2009b. In current versions, using vectorization or 'all' are faster for small arrays and roughly equivalent for large arrays. That's on my hardware, so I make no guarantees that it's exactly universal.
Performance aside, it's hard to justify this verbose method over the canonical techniques, if only for the sake of readability.
It's not something I'd recommend, and I doubt that the legacy performance is the typical reason that people gravitate to the approach, but I thought it was interesting to note for old time's sake.

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


Tom
Tom 2020년 1월 28일
M = max(A,[],'all') finds the maximum over all elements of A. This syntax is valid for MATLAB® versions R2018b and later.
  댓글 수: 2
Steven Lord
Steven Lord 2020년 3월 25일
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
Dmaldo01 2016년 4월 22일
편집: Dmaldo01 2016년 4월 22일
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
Yokesh 2019년 5월 16일
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
Walter Roberson
Walter Roberson 2020년 3월 25일
Also it would only be n max calls.

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


JPS
JPS 2021년 2월 6일
or you can use,
M = max(max(A));
  댓글 수: 2
Walter Roberson
Walter Roberson 2021년 3월 15일
A = [1 3 2 5; 7 9 12 8; 12 8 9 0]
A = 3×4
1 3 2 5 7 9 12 8 12 8 9 0
[best3, best3idx] = maxk(A(:),3)
best3 = 3×1
12 12 9
best3idx = 3×1
3 8 5
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)
{[12]} {[ 3 8]} {[ 9]} {[ 5 9]} {[ 8]} {[6 11]}
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 more on Descriptive Statistics in Help Center and File Exchange

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by