Подтвердить что ты не робот

Индекс максимального и минимального значения в массиве

Как я могу найти индекс максимального элемента в массиве без цикла?

Например, если у меня есть:

a = [1 2 999 3];

Я хочу определить функцию indexMax, чтобы indexMax(a) возвращал 3.

Аналогично для определения indexMin.

4b9b3361

Ответ 1

Как указано Evgeni max и min может возвращать argmax и argmin в качестве вторых аргументов.
Стоит отметить, что вы можете использовать эти функции по определенным параметрам:

 A = rand(4); % 4x4 matrix
 [ row_max row_argmax ] = max( A, [], 2 ); % max for each row - 2nd dimension
 [ col_min col_argmin ] = min( A, [], 1 ); % min for each column - 1st dimension

Обратите внимание на пустой [] второй аргумент - крайне важно max( A, [], 2 ) не равно эквивалентно max( A, 2 ) (я оставлю его вам как небольшое упражнение, чтобы увидеть, что max( A, 2 )).

Аргмакс/argmin, возвращаемый из этих вызовов "вдоль измерения", представляет собой индексы строк/столбцов.

Ответ 2

Встроенная функция max имеет эту функцию, когда указаны два выходных аргумента:

a = [1 2 999 3];
[the_max, index_of_max] = max(a)

the_max =

   999


index_of_max =

     3

Аналогично для min.

Ответ 3

Как альтернативное решение, вы можете попробовать следующее:

a = rand(1,1000);
min_idx = find(a == min(a));

Очевидно, что такая же процедура применима в случае max.

Надеюсь, это поможет.