Найти самое высокое / самое низкое значение в матрице - PullRequest
4 голосов
/ 05 октября 2011

очень простой вопрос: как найти самое высокое или самое низкое значение в случайной матрице.Я знаю, что есть возможность сказать:

a = find(A>0.5)

, но то, что я ищу, было бы больше похоже на это:

A = rand(5,5)
A = 
0.9388    0.9498    0.6059    0.7447    0.2835
0.6338    0.0104    0.5179    0.8738    0.0586
0.9297    0.1678    0.9429    0.9641    0.8210
0.0629    0.7553    0.7412    0.9819    0.1795
0.3069    0.8338    0.7011    0.9186    0.0349

% find highest (or lowest) value

ans = A(19)%for the highest or A(7) %for the lowest value in this case

Ответы [ 3 ]

16 голосов
/ 06 октября 2011

Посмотрите на функции min() и max(). Они могут возвращать как самое высокое / самое низкое значение, так и его индекс:

[B,I]=min(A(:)); %# note I fixed a bug on this line!

возвращает I=7 и B=A(7)=A(2,2). Выражение A(:) говорит, что MATLAB пока что рассматривает A как одномерный массив, поэтому даже если A равен 5x5, он возвращает линейный индекс 7.

Если вам нужны 2D-координаты, то есть "2,2" в B=A(7)=A(2,2), вы можете использовать [I,J] = ind2sub(size(A),I), который возвращает I=2,J=2, см. здесь .

Обновление
Если вам нужны все индексы записей, которые достигают минимального значения, вы можете использовать find :

I = find(A==min(A(:));

I теперь является вектором их всех.

3 голосов
/ 06 октября 2011

Для матриц вам нужно запускать функции MIN и MAX дважды, поскольку они работают по столбцам, т.е. max(A) возвращает вектор, где каждый элемент является максимальным элементом всоответствующий столбец A.

>> A = rand(4)

A =

         0.421761282626275         0.655740699156587         0.678735154857773         0.655477890177557
         0.915735525189067        0.0357116785741896         0.757740130578333         0.171186687811562
         0.792207329559554         0.849129305868777         0.743132468124916         0.706046088019609
         0.959492426392903         0.933993247757551         0.392227019534168        0.0318328463774207

>> max(max(A))

ans =

         0.959492426392903

>> min(min(A))

ans =

        0.0318328463774207

Обратите внимание, что это работает только для матриц.Для массивов более высокого размера потребуется запуск MIN и MAX столько раз, сколько измерений вы можете получить, используя NDIMS .

0 голосов
/ 06 сентября 2013

Попробуйте это

A=magic(5)
[x,y]=find(A==max(max(A))) %index maximum of the matrix A 
A_max=A(x,y)
[x1,y1]=find(A==min(max(A))) %index minimum of the matrix A 
A_min=A(x1,y1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...