Поиск минимальных элементов матрицы для каждой строки – MATLAB

Вопрос:Вот пример: У меня есть следующая матрица: 4 0 3 5 2 6 9 4 8 Теперь я хочу найти два минимальных значения и их индексы для каждой строки. Таким образом, результат: row1: 0 , position (1,2) and 3, position (1,3) row2... row3.... Ну, я использую много циклов, и это довольно сложно. Так какой способ

Вопрос:

Вот пример:

У меня есть следующая матрица:

4 0 3 5 2 6 9 4 8

Теперь я хочу найти два минимальных значения и их индексы для каждой строки. Таким образом, результат:

row1: 0 , position (1,2) and 3, position (1,3) row2… row3….

Ну, я использую много циклов, и это довольно сложно. Так какой способ использовать функцию MATLAB для достижения моей цели?

Я пробовал, но никакого результата:

C=min(my_matrix,[],2) [C(1),I] = MIN(my_matrix(1,:)) &find the position of the minimum value in row 1?? Лучший ответ:

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

[A_sorted, I] = sort(A, 2); val = A_sorted(:, 1:2) idx = I(:, 1:2)

Теперь val должен содержать значения первых двух наименьших элементов в каждой строке, а idx должен содержать номера столбцов.

Если вы хотите напечатать все на экране форматированным способом (как показано в вашем вопросе), вы можете использовать всемогущую команду fprintf:

rows = (1:size(A, 1))’; fprintf(‘row %d: %d, position (%d, %d) and %d, position (%d, %d)n’, … [rows — 1, val(:, 1), rows, idx(:, 1), val(:, 2), rows, idx(:, 2)]’)

Пример

A = [4, 0, 3; 5, 2, 6; 9, 4, 8]; %// Find two smallest values in each row and their positions [A_sorted, I] = sort(A, 2); val = A_sorted(:, 1:2) idx = I(:, 1:2) %// Print the result rows = (1:size(A, 1))’; fprintf(‘row %d: %d, position (%d, %d) and %d, position (%d, %d)n’, … [rows — 1, val(:, 1), rows, idx(:, 1), val(:, 2), rows, idx(:, 2)]’)

Результат:

val = 0 3 2 5 4 8 idx = 2 3 2 1 2 3

а отформатированный вывод:

row 0: 0, position (1, 2) and 3, position (1, 3) row 1: 2, position (2, 2) and 5, position (2, 1) row 2: 4, position (3, 2) and 8, position (3, 3) Ответ №1

Вы можете легко сделать это, используя sort.

[A_sorted, idx] = sort(A,2); % specify that you want to sort along rows instead of columns

Столбец idx содержит минимальное значение для каждой строки A, а второй столбец имеет индекс второго наименьшего значения.

Минимальные значения можно получить из A_sorted

Ответ №2

Вы можете сделать что-то вроде ниже, где A – ваша матрица.

[min1, sub1] = min(A, [], 2); % Gets the min element of each row rowVec = [1:size(A,1)]’; % A column vector of row numbers to match sub1 ind1 = sub2ind(size(A), rowVec, sub1) % Gets indices of matrix A where mins are A2 = A; % Copy of A A2(ind1) = NaN; % Removes min elements of A [min2, sub2] = min(A2, [], 2); % Gets your second min element of each row

min1 будет вашим вектором наименьших значений, min2 вашим вектором вторых наименьших значений для каждой строки. Их соответствующие индексы для строки будут находиться в sub1 и sub2.

Оцените статью
Добавить комментарий