Main Content

配列の形状変更および再配列

MATLAB® の多くの関数は、既存の配列の要素を取得し、別の形状またはシーケンスに配置することができます。これは、その後の計算用にデータを前処理したりデータを解析したりする場合に役立ちます。

形状変更

関数 reshape は配列のサイズと形状を変更します。たとえば、3 行 4 列の行列を 2 行 6 列の行列に形状変更します。

A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
A = 3×4

     1     4     7    10
     2     5     8    11
     3     6     9    12

B = reshape(A,2,6)
B = 2×6

     1     3     5     7     9    11
     2     4     6     8    10    12

各形状の要素の数が同じである限り、任意の次元数をもつ配列に形状を変更できます。A の要素を使用して、2 x 2 x 3 の多次元配列を作成します。

C = reshape(A,2,2,3)
C = 
C(:,:,1) =

     1     3
     2     4


C(:,:,2) =

     5     7
     6     8


C(:,:,3) =

     9    11
    10    12

転置と反転

線形代数の一般的なタスクは、行を列に、列を行に変換する行列の転置の操作です。これを行うには、関数transposeまたは .' 演算子を使用します。

3 行 3 列の行列を作成し、その転置を計算します。

A = magic(3)
A = 3×3

     8     1     6
     3     5     7
     4     9     2

B = A.'
B = 3×3

     8     3     4
     1     5     9
     6     7     2

類似の演算子 ' は、複素数行列の共役転置を計算します。この演算は各要素の複素共役を計算して転置します。2 行 2 列の複素行列を作成し、その共役転置を計算します。

A = [1+i 1-i; -i i]
A = 2×2 complex

   1.0000 + 1.0000i   1.0000 - 1.0000i
   0.0000 - 1.0000i   0.0000 + 1.0000i

B = A'
B = 2×2 complex

   1.0000 - 1.0000i   0.0000 + 1.0000i
   1.0000 + 1.0000i   0.0000 - 1.0000i

flipud は行列の行を上から下方向に反転し、fliplr は列を左から右方向に反転します。

A = [1 2; 3 4]
A = 2×2

     1     2
     3     4

B = flipud(A)
B = 2×2

     3     4
     1     2

C = fliplr(A)
C = 2×2

     2     1
     4     3

シフトと回転

関数 circshift を使用して、特定の数の位置だけ配列の要素をシフトできます。たとえば、3 行 4 列の行列を作成し、その列を右に 2 つシフトします。2 番目の引数 [0 2] は、行を 0 桁シフトし、列を右に 2 桁シフトするように circshift に指示しています。

A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A = 3×4

     1     2     3     4
     5     6     7     8
     9    10    11    12

B = circshift(A,[0 2])
B = 3×4

     3     4     1     2
     7     8     5     6
    11    12     9    10

A の行を上に 1 つシフトし、列を所定の位置で保持するには、2 番目の引数を [-1 0] として指定します。

C = circshift(A,[-1 0])
C = 3×4

     5     6     7     8
     9    10    11    12
     1     2     3     4

関数 rot90 は行列を反時計回りに 90 度回転できます。

A = [1 2; 3 4]
A = 2×2

     1     2
     3     4

B = rot90(A)
B = 2×2

     2     4
     1     3

2 番目の引数を使用して回転数を指定し、さらに 3 回回転する場合、元の行列 A になります。

C = rot90(B,3)
C = 2×2

     1     2
     3     4

並べ替え

配列内のデータの並べ替えも貴重なツールであり、MATLAB には多数のアプローチがあります。たとえば、関数 sort は行列の各行または各列の要素を個別に昇順または降順に並べ替えます。行列 A を作成し、A の各列を昇順に並べ替えます。

A = magic(4)
A = 4×4

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

B = sort(A)
B = 4×4

     4     2     3     1
     5     7     6     8
     9    11    10    12
    16    14    15    13

各行を降順に並べ替えます。2 番目の引数値 2 は行方向に並べ替えるように指定します。

C = sort(A,2,'descend')
C = 4×4

    16    13     3     2
    11    10     8     5
    12     9     7     6
    15    14     4     1

行または列全体を互いに相対的に並べ替えるには、関数 sortrows を使用します。たとえば、1 列目の要素に従って A の行を昇順に並べ替えます。行の位置は変化しますが、各行の要素の順序は保持されます。

D = sortrows(A) 
D = 4×4

     4    14    15     1
     5    11    10     8
     9     7     6    12
    16     2     3    13

関連するトピック