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

Как заставить MATLAB отображать индекс минимального значения в 2D-массиве?

Я пытаюсь написать script в MATLAB, который находит местоположение минимального значения двумерного массива чисел. Я уверен, что в этом массиве всего 1 минимум, поэтому наличие нескольких позиций в массиве с одинаковым минимальным значением не является проблемой. Я могу найти минимальное значение для массива, но в массиве 30x30 я хотел бы знать, в какой строке и столбце указано минимальное значение.

4b9b3361

Ответ 1

В качестве альтернативной версии, объедините min, чтобы получить минимальное значение, и найдите, чтобы вернуть индекс, если вы уже рассчитали минимум, просто используйте find.

>> a=magic(30);
>> [r,c]=find(a==min(min(a)))

r =
     1
c =
     8

Или в зависимости от того, как вы хотите использовать информацию о местоположении, вы можете определить ее с помощью логического массива, и в этом случае логическая адресация может использоваться для предоставления вам таблицы истинности.

>> a=magic(30);
>> locn=(a==min(min(a)));

Ответ 2

Вы можете изменить матрицу на вектор, найти индекс минимума, используя MIN, а затем преобразовать этот линейный индекс в матрицу индекс:

>> x = randi(5, 5)

x =

     5     4     4     2     4
     4     2     4     5     5
     3     1     3     4     3
     3     4     2     5     1
     2     4     5     3     5

>> [value, index] = min(reshape(x, numel(x), 1));
>> [i,j] = ind2sub(size(x), index)

i =

     3


j =

     2

Ответ 3

Посмотрите описание функции min. Он может вернуть минимальное значение, а также индекс. Для двухмерного массива просто вызовите его дважды.

A = rand(30); % some matrix
[minColVal, minColIdx] = min(A);
[minRowVal, minRowIdx] = min(minColVal);

minVal = minRowVal;
minValIdx = [minColIdx(minRowIdx), minRowIdx];

Изменить: @b3 решение, вероятно, более элегантно (быстрее и требует меньше временного пространства)

Ответ 4

Чтобы найти min или max в подмножестве вектора - Если A является вектором, а "lowerBound" и "upperBound" являются границами вектора, среди которых вам нужно найти максимальное (или min) значение, то используйте эту команду -

[Value,Index]=min(A(lowerBound:upperBound));

Это возвращает значение "Значение" в качестве минимального или максимального значения среди A (нижнего диапазона) и A (вверху) и "Индекс" как с "lowerBound" в качестве смещения. Таким образом, чтобы найти абсолютный индекс, вам нужно добавить "lowerBound" в индекс.

Ответ 5

Будет работать альтернативное решение с использованием встроенной функции.

    >> min_index = @(matrix) find(matrix == min(reshape(matrix, [1,numel(matrix)])));

    >> a=magic(30);
    >> [r,c]=min_index(a)

    r =
         1

    c =
         8