Я пытаюсь написать script в MATLAB, который находит местоположение минимального значения двумерного массива чисел. Я уверен, что в этом массиве всего 1 минимум, поэтому наличие нескольких позиций в массиве с одинаковым минимальным значением не является проблемой. Я могу найти минимальное значение для массива, но в массиве 30x30 я хотел бы знать, в какой строке и столбце указано минимальное значение.
Как заставить MATLAB отображать индекс минимального значения в 2D-массиве?
Ответ 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