ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

行列のシフトと並べ替え

シフトおよび並べ替え用の関数

次の関数を使用して行列の要素をシフト、または並べ替えを行います。

関数

説明

circshift

行列のコンテンツを循環シフトします。

sort

配列要素を昇順または降順に並べ替えます。

sortrows

行を昇順に並べ替えます。

issorted

行列要素が並べ替えられた順序になっているか判定します。

行列、複数次元の配列、文字列のセル配列を任意の次元に沿って並べ替え、要素を昇順、または降順に並べ替えることができます。並べ替え関数はオプションのインデックス配列も返して、並べ替え作業中に要素の並べ替え順序を示します。

行列要素のシフト

関数 circshift は行列要素を、1 つ以上の次元で循環してシフトします。行列外にシフトされた行や列は、反対側に循環して戻されます。たとえば、4 行 7 列の行列を左にシフトすると、2 列目から 7 列目までの要素が 1 列目から 7 列目に移動します。

A という 5 行 8 列の行列を作成し、2 次元 (水平に) 3 つ右にシフトします (3 列左にシフトする場合は、[0, -3] を入力します)。

A = [1:8; 11:18; 21:28; 31:38; 41:48]
A =
     1     2     3     4     5     6     7     8
    11    12    13    14    15    16    17    18
    21    22    23    24    25    26    27    28
    31    32    33    34    35    36    37    38
    41    42    43    44    45    46    47    48

B = circshift(A, [0, 3])
B =
     6     7     8     1     2     3     4     5
    16    17    18    11    12    13    14    15
    26    27    28    21    22    23    24    25
    36    37    38    31    32    33    34    35
    46    47    48    41    42    43    44    45

次に、A を両方の次元でシフトします。3 列右、2 行上に移動します。

A = [1:8; 11:18; 21:28; 31:38; 41:48];

B = circshift(A, [-2, 3])
B =
    26    27    28    21    22    23    24    25
    36    37    38    31    32    33    34    35
    46    47    48    41    42    43    44    45
     6     7     8     1     2     3     4     5
    16    17    18    11    12    13    14    15

関数 circshift はシフトした行や列を行列の反対側に移動するため、Aと同一サイズだけシフトすると、すべての行と列がオリジナルの位置に戻ります。

B = circshift(A, size(A));

all(B(:) == A(:))          % Do all elements of B equal A?
ans =
     1                     % Yes

各列のデータの並べ替え

関数 sort は、特定の次元で行列要素を並べ替えます。関数の構文は、次のようになります。

sort(matrix, dimension)

行列の列を並べ替えるには、1 を dimension の引数として指定します。行内で並べ替える場合は、dimension を 2 と指定します。

この例では 6 行 7 列の任意のテスト行列を作成します。

A=floor(gallery('uniformdata',[6 7],0)*100)
A =
    95    45    92    41    13     1    84
    23     1    73    89    20    74    52
    60    82    17     5    19    44    20
    48    44    40    35    60    93    67
    89    61    93    81    27    46    83
    76    79    91     0    19    41     1

A の各列を昇順に並べ替えます。

c = sort(A, 1)
c =
    23     1    17     0    13     1     1
    48    44    40     5    19    41    20
    60    45    73    35    19    44    52
    76    61    91    41    20    46    67
    89    79    92    81    27    74    83
    95    82    93    89    60    93    84

issorted(c(:, 1))
ans =
     1

各行のデータの並べ替え

関数 issorted を使用して各行のデータを並べ替えます。上記の例を使用して、A の各行を降順で並べ替えると、関数 issorted は昇順の列に対してテストします。ベクトルを逆転して、降順の並べ替えの結果をテストします。

A=floor(gallery('uniformdata',[6 7],0)*100);

r = sort(A, 2, 'descend')
r =
    95    92    84    45    41    13     1
    89    74    73    52    23    20     1
    82    60    44    20    19    17     5
    93    67    60    48    44    40    35
    93    89    83    81    61    46    27
    91    79    76    41    19     1     0

issorted(fliplr(r(1, :)))
ans =
     1

2 番目の出力を指定すると、関数 sort はオリジナルの行列 A の インデックスを、出力行列での表示順に配置した状態で返します。

[r,index] = sort(A, 2, 'descend');
index
index =
     1     3     7     2     4     5     6
     4     6     3     7     1     5     2
     2     1     6     7     5     3     4
     6     7     5     1     2     3     4
     3     1     7     4     2     6     5
     3     2     1     6     5     7     4

index の 2 行目に 4 6 3 7 1 5 2 のシーケンスが含まれています。これは行列 r の 2 行目が、A(2,4)A(2,6)A(2,3)A(2,7)A(2,1)A(2,5)A(2,2) から成っていることを意味します。

行ベクトルの並べ替え

関数 sortrows は、各行の要素をオリジナルの位置で維持しながら、行ベクトル全体を指定した列の要素に従って並べ替えます。

次の例は、乱数行列 A を作成します。

A=floor(gallery('uniformdata',[6 7],0)*100);
A =
    95    45    92    41    13     1    84
    23     1    73    89    20    74    52
    60    82    17     5    19    44    20
    48    44    40    35    60    93    67
    89    61    93    81    27    46    83
    76    79    91     0    19    41     1

列 1 の値に基づき昇順に並べ替えるには、入力引数を1 つ使用して関数 sortrows を呼び出します。

sortrows(A)
r =
    23     1    73    89    20    74    52
    48    44    40    35    60    93    67
    60    82    17     5    19    44    20
    76    79    91     0    19    41     1
    89    61    93    81    27    46    83
    95    45    92    41    13     1    84

最初以外の列の並べ替えを基準にするには、列番号を示す 2 番目の入力引数 (この場合は列 4) と共に関数 sortrows を呼び出します。

r = sortrows(A, 4)
r =
    76    79    91     0    19    41     1
    60    82    17     5    19    44    20
    48    44    40    35    60    93    67
    95    45    92    41    13     1    84
    89    61    93    81    27    46    83
    23     1    73    89    20    74    52
この情報は役に立ちましたか?