3

次に例を示します。

私は次のマトリックスを持っています:

4 0 3
5 2 6
9 4 8

ここで、2つの最小値と、各行のそれらのインデックスを見つけたいと思います。したがって、結果は次のようになります。

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??
4

3 に答える 3

4

次のように、行列の各行を昇順で並べ替えてから、各行の最初の 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)
于 2013-01-09T17:32:32.443 に答える
2

を使えば簡単にできますsort

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

の列にidxは の各行の最小値が含まれA、2 番目の列には 2 番目に小さい値のインデックスが含まれます。

最小値は次から取得できます。A_sorted

于 2013-01-09T17:03:10.967 に答える
1

以下のようなことができ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のベクトル、各行の 2 番目に小さい値のベクトルになります。行のそれぞれのインデックスは と にsub1なりsub2ます。

于 2013-01-09T17:09:29.647 に答える