次のように、行列の各行を昇順で並べ替えてから、各行の最初の 2 つのインデックスを選択できます。
[A_sorted, I] = sort(A, 2);
val = A_sorted(:, 1:2)
idx = I(:, 1:2)
val
各行の最初の 2 つの最小要素の値と、idx
それらの列番号が含まれている必要があります。
画面上のすべてをフォーマットされた方法で(質問に示されているように)印刷したい場合は、all-mightyfprintf
コマンドを使用できます。
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)