MATLAB Answers

To find the maximum value in a matrix?

3,505 ビュー (過去 30 日間)
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
Jan 2012 年 9 月 5 日
Sorry that I mention the barely obvious, but the answer is 22.
KHOIROM Motilal
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(:));

  1 件のコメント

Image Analyst
Image Analyst 2012 年 9 月 5 日
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);

サインインしてコメントする。

その他の回答 (4 件)

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 9 月 5 日
max(max(A))

  3 件のコメント

Andrei Bobrov
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
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
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

サインインしてコメントする。


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 件のコメント

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

  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 件のコメント

Steven Lord
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
Walter Roberson 2020 年 3 月 25 日
Also it would only be n max calls.

サインインしてコメントする。

タグ

製品

Community Treasure Hunt

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

Start Hunting!

Translated by