To find the maximum value in a matrix?
이전 댓글 표시
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
Jan
2012년 9월 5일
Sorry that I mention the barely obvious, but the answer is 22.
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)
채택된 답변
추가 답변 (5개)
Azzi Abdelmalek
2012년 9월 5일
max(max(A))
댓글 수: 4
Andrei Bobrov
2012년 9월 5일
편집: Andrei Bobrov
2012년 9월 5일
M = [6 8 9
7 10 11
21 22 8];
index = 1;
max1 = M(index);
for jj = 2:numel(M)
if max1 < M(jj)
max1 = M(jj);
index = jj;
end
end
:)
José-Luis
2012년 9월 5일
Or if you really want to throw efficiency out the window:
M = [6 8 9
7 10 11
21 22 8];
unikM = unique(M);
val = unikM(1);
idx = unikM > val;
while (sum(idx) > 1)
idx = find(idx);
val = unikM(idx(1));
idx = unikM > val;
maxVal = unikM(idx)
end
Jonathan Posada
2016년 2월 20일
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
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
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
2020년 1월 28일
5 개 추천
댓글 수: 2
John Doe
2020년 1월 31일
This should be upvoted and/or somehow appear closer to the chosen answer, as M = max(A,'all') seems not to work at all in R2018b+ (returning the entire matrix).
M = max(A(:)) seems to work in R2018b+ and presumably universally.
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
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
2019년 5월 16일
1 개 추천
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
Steven Lord
2019년 5월 16일
No, you don't need to include multiple calls to max. See the accepted Answer for approaches that call max only once regardless of how many dimensions the input argument has.
Walter Roberson
2020년 3월 25일
Also it would only be n max calls.
JPS
2021년 2월 6일
or you can use,
M = max(max(A));
댓글 수: 2
Adrian Brown
2021년 3월 15일
hello,
There is any way for a matrix size NxM to get the k maximum element in the whole matrix not in rows or colomns but in only elements. for example matrix A = [1 3 2 5, 7 9 12 8, 12 8 9 0] for K= 3 the 3 maximum elements are 12 9 and 8 and I want to return there location in the matrix.
I really appreciate any help
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.)
카테고리
도움말 센터 및 File Exchange에서 Descriptive Statistics and Insights에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!