16.2 Rearranging Matrices

Last-modified: 2025-03-29 (土) 19:14:43

16.2 行列の並べ替え¶

: B = fliplr (A)

配列を左から右に反転します。

列の順序を逆にしたAのコピーを返します。つまり、Aは垂直軸を中心に左から右に反転されます。例:

fliplr ([1, 2; 3, 4])
    ⇒  2  1
        4  3

See also: flipud, flip, rot90, rotdim.

: B = flipud (A)

配列を上下反転します。

行の順序を逆にしたAのコピーを返します。つまり、Aは水平軸を中心に上下反転されます。例:

flipud ([1, 2; 3, 4])
    ⇒  3  4
        1  2

See also: fliplr, flip, rot90, rotdim.

: B = flip (A)

: B = flip (A, dim)

次元dimを反転した配列Aのコピーを返します。

dimが指定されていない場合は、デフォルトで最初の非シングルトン次元に設定されます。

## row vector
flip ([1  2  3  4])
     ⇒  4  3  2  1
## column vector
flip ([1; 2; 3; 4])
     ⇒  4
         3
         2
         1
## 2-D matrix along dimension 1
flip ([1 2; 3 4])
     ⇒  3  4
         1  2
## 2-D matrix along dimension 2
flip ([1 2; 3 4], 2)
     ⇒  2  1
         4  3

See also: fliplr, flipud, rot90, rotdim, permute, transpose.

: B = rot90 (A)

: B = rot90 (A, k)

配列を 90 度ずつ回転します。

要素を反時計回りに 90 度ずつ回転した Aのコピーを返します。

2番目の引数はオプションで、90度回転を何回適用するかを指定します(デフォルト値は1)。kの値が負の場合、行列 は時計回りに回転します。たとえば、

rot90 ([1, 2; 3, 4], -1)
   ⇒  3  1
       4  2

指定された行列を時計回りに 90 度回転します。以下はすべて同等のステートメントです。

rot90 ([1, 2; 3, 4], -1)
rot90 ([1, 2; 3, 4], 3)
rot90 ([1, 2; 3, 4], 7)

回転は常に最初の 2 つの次元、つまり行と列の平面上で実行されます。他の平面上で回転を実行するには、 を使用します rotdim。

See also: rotdim, fliplr, flipud, flip.

: B = rotdim (A)

: B = rotdim (A, n)

: B = rotdim (A, n, plane)

要素を反時計回りに 90 度ずつ回転した Aのコピーを返します。

2 番目の引数nはオプションであり、90 度回転を何回適用するかを指定します (デフォルト値は 1) 。nの値が負の場合、行列は時計回りに回転します。

3 番目の引数もオプションで、回転の平面を定義します。存在する場合、plane は、行列の 2 つの異なる有効な次元を含む 2 要素のベクトルです。plane が指定されていない場合は、最初の 2 つの非シングルトン次元が使用されます。

例えば、

rotdim ([1, 2; 3, 4], -1, [1, 2])
    ⇒  3  1
        4  2

指定された行列を時計回りに 90 度回転します。以下はすべて同等のステートメントです。

rotdim ([1, 2; 3, 4], -1, [1, 2])
rotdim ([1, 2; 3, 4], 3, [1, 2])
rotdim ([1, 2; 3, 4], 7, [1, 2])

See also: rot90, fliplr, flipud, flip.

: A = cat (dim, array1, array2, …, arrayN)
次元dimに沿って、 N 次元配列オブジェクトarray1、array2、…、arrayNの連結を返します

A = ones (2, 2);
B = zeros (2, 2);
cat (2, A, B)
 ⇒ 1 1 0 0
    1 1 0 0

あるいは、次のようにしてAとB を2 番目の次元に沿って連結することもできます。

[A, B]

dim はND 配列オブジェクトの次元よりも大きくなる可能性があり、次の例に示すように、 結果はdim次元になります。

cat (4, ones (2, 2), zeros (2, 2))
 ⇒ ans(:,:,1,1) =
      1 1
      1 1
    ans(:,:,1,2) =
      0 0
      0 0

See also: horzcat, vertcat.

: A = horzcat (array1, array2, …, arrayN)
次元 2 に沿った ND 配列オブジェクト ( array1、 array2、…、arrayN)の水平連結を返します。

新しい行列を作成するための構文を使用して、配列を水平に連結することもできます。例:

A = [ array1, array2, ... ]

この構文は、Octave パーサーが関数呼び出しのオーバーヘッドなしで配列を連結できるため、若干効率的です。

See also: cat, vertcat.

: A = vertcat (array1, array2, …, arrayN)

次元 1 に沿った ND 配列オブジェクト ( array1、 array2、…、arrayN)の垂直連結を返します。

新しい行列を作成するための構文を使用して、配列を垂直に連結することもできます。例:

A = [ array1; array2; ... ]

この構文は、Octave パーサーが関数呼び出しのオーバーヘッドなしで配列を連結できるため、若干効率的です。

See also: cat, horzcat.

: B = permute (A, perm)

ND 配列オブジェクトAの一般化転置を返します。

順列ベクトルperm には、要素が含まれている必要があります 1:ndims (A) (順序は任意ですが、各要素は 1 回だけ出現する必要があります)。AのN番目の次元は、次元に再マップされます 。例: PERM(N)

x = zeros ([2, 3, 5, 7]);
size (x)
  ⇒  2   3   5   7
size (permute (x, [2, 1, 3, 4]))
  ⇒  3   2   5   7
size (permute (x, [1, 3, 4, 2]))
  ⇒  2   5   7   3
## The identity permutation
size (permute (x, [1, 2, 3, 4]))
  ⇒  2   3   5   7

See also: ipermute.

: A = ipermute (B, iperm)
関数の逆関数permute。

表現

ipermute (permute (A, perm), perm)
returns the original array A.

See also: permute.

: B = reshape (A, m, n, …)

: B = reshape (A, [m n …])

: B = reshape (A, …, [], …)

: B = reshape (A, size)

行列Aから要素が取得された、指定された次元 ( m、n 、…)の行列を返します。

行列の要素は、列優先順でアクセスされます (Fortran 配列が格納されるのと同じように)。

次のコードは、1x4 行ベクトルを 2x2 正方行列に再形成する方法を示しています。

reshape ([1, 2, 3, 4], 2, 2)
     ⇒  1  3
         2  4

元の行列 ( ) の要素の合計数は、新しい行列 ( ) の要素の合計数と一致する必要があることに注意してください。 prod (size (A))prod ([m n …])

返される行列の 1 つの次元は未指定のままにしておくことができ、その場合 Octave はそのサイズを自動的に決定します。空の行列 ([]) は、未指定の次元を示すために使用されます。

See also: resize, vec, postpad, cat, squeeze.

: B = resize (A, m)

: B = resize (A, m, n, …)

: B = resize (A, [m n …])

必要に応じて要素を切り取ってA のサイズを変更します。

結果、特定のインデックスを持つ要素は、インデックスがAの範囲内にある場合、 Aの対応する要素と等しくなります。それ以外の場合、要素はゼロに設定されます。

言い換えれば、

B = resize (A, dv)

次のコードと同等です。

B = zeros (dv, class (A));
sz = min (dv, size (A));
for i = 1:length (sz)
 idx{i} = 1:sz(i);
endfor
B(idx{:}) = A(idx{:});

より効率的に実行されます。

mのみが指定され、それがスカラーである場合、結果の次元は m行m列になります。m、n、…がすべてスカラーである場合、結果の次元はm行n列…になります。入力としてベクトルが指定された場合、結果の次元はそのベクトルの要素によって指定されます。

オブジェクトは、実際の次元よりも大きいサイズにサイズ変更できます。この場合、不足している次元は 1 であると見なされます。オブジェクトのサイズをそれより小さい次元に変更することはできません。

See also: reshape, postpad, prepad, cat.

: y = circshift (x, n)

: y = circshift (x, n, dim)

配列xの値を循環シフトします。

n はxの次元数以下の整数のベクトルでなければなりません。 nの値は正または負のいずれかで、 xの値がシフトされる方向を決定します。 nの要素がゼロの場合、 xの対応する次元はシフトされません。nがスカラーでdimが指定されていない場合、シフトは最初の非特異次元に適用されます。

スカラーdimが指定されている場合は、指定された次元に沿って操作します。この場合、nもスカラーである必要があります。

例:

x = [1, 2, 3;
    4, 5, 6;
    7, 8, 9];
## positive shift on rows (1st non-singular dim)
circshift (x, 1)
 ⇒
      7   8   9
      1   2   3
      4   5   6
## negative shift on rows (1st non-singular dim)
circshift (x, -2)
 ⇒
      7   8   9
      1   2   3
      4   5   6
## no shift of rows, shift columns by 1 (2nd dimension)
circshift (x, [0,1])
 ⇒
      3   1   2
      6   4   5
      9   7   8
## shift columns (2nd dimension)
circshift (x, 1, 2)
 ⇒
      3   1   2
      6   4   5
      9   7   8

See also: permute, ipermute, shiftdim.

: y = shiftdim (x, n)

: [y, ns] = shiftdim (x)

xの次元をnだけシフトします。ここで、n は整数スカラーでなければなりません。

nが正の場合、 xの次元は左にシフトされ、先頭の次元は末尾に循環されます。n が負の場合、xの次元は右にシフトされ、先頭のn 個のシングルトン次元が追加されます。

単一の引数 で呼び出され、shiftdim先頭のシングルトン次元を削除し、削除された次元の数を 2 番目の出力引数nsに返します。

例えば:

x = ones (1, 2, 3);
size (shiftdim (x, -1))
 ⇒   1   1   2   3
size (shiftdim (x, 1))
 ⇒   2   3
[b, ns] = shiftdim (x)
 ⇒ b =
       1   1   1
       1   1   1
 ⇒ ns = 1

See also: reshape, permute, ipermute, circshift, squeeze.

: [s, i] = sort (x)

: [s, i] = sort (x, dim)

: [s, i] = sort (x, mode)

: [s, i] = sort (x, dim, mode)

要素を昇順に並べた xのコピーを返します。

行列の場合、sort列内の要素を順序付けます

例えば:

sort ([1, 2; 2, 3; 3, 1])
  ⇒  1  1
      2  2
      3  3

オプション引数dimが指定された場合、行列はdimによって定義された次元に沿ってソートされます。オプション引数mode は 、値がソートされる順序を定義します。mode の有効な値 は"ascend"またはです"descend"。

このsort関数は、ソートされた行列内の要素の元の行インデックスを含む行列を生成するためにも使用できます。例:

[s, i] = sort ([1, 2; 2, 3; 3, 1])
 ⇒ s = 1  1
        2  2
        3  3
 ⇒ i = 1  3
        2  1
        3  2

等しい要素の場合、インデックスは、等しい要素が元のリストに表示された順序でリストされるようになります。

複素数のエントリは、まず大きさ ( ) でソートされ、同点の場合は位相角 ( ) でソートされます。例: abs (z)angle (z)

sort ([1+i; 1; 1-i])
   ⇒ 1 + 0i
      1 - 1i
      1 + 1i

NaN 値は他の値よりも大きいものとして扱われ、リストの末尾にソートされます。

このsort関数は、文字列や文字列のセル配列を並べ替えるためにも使用できます。その場合、文字列の ASCII 辞書順序 (大文字の「A」が小文字の「a」の前に来る) が使用されます。

で使用されるアルゴリズムは、sort部分的に順序付けられたリストのソートに最適化されています。

See also: sortrows, issorted.

: [s, i] = sortrows (A)

: [s, i] = sortrows (A, c)

行列Aの行をcで指定された列の順序に従って並べ替えます。

デフォルトでは(cが省略されているか、 cで特定の列が指定されていない場合)、昇順の並べ替え順序が使用されます。ただし、cの要素が負の場合、対応する列は降順で並べ替えられます。Aの要素が文字列の場合、辞書式並べ替えが使用されます。

例: 列 2 を降順で並べ替え、次に列 3 を昇順で並べ替える

x = [ 7, 1, 4;
     8, 3, 5;
     9, 3, 6 ];
sortrows (x, [-2, 3])
  ⇒ 8  3  5
     9  3  6
     7  1  4

See also: sort.

: tf = issorted (A)

: tf = issorted (A, mode)

: tf = issorted (A, "rows", mode)

ベクトルAがmode ("ascend"、"descend"、 のいずれか"either") に従ってソートされている場合は true を返します。

デフォルトでは、モードは です"ascend"。NaN は と同じように扱われますsort。

オプションの引数"rows"が指定されている場合は、関数の出力sortrows(オプションなし)として行列が行ごとにソートされているかどうかを確認します。

この関数はスパース行列をサポートしていません。

See also: sort, sortrows.

: nel = nth_element (x, n)

: nel = nth_element (x, n, dim)

によって定義された順序を使用して、ベクトルの n 番目に小さい要素を選択します sort。

結果は と同等になります。 sort(x)(n)

n はl:u昇順 または降順の連続した範囲にすることもできますu:-1:l。その場合は、要素の範囲が返されます。

xが配列の場合、 dimnth_elementで定義された次元に沿って動作します。 dimが指定されていない 場合は、最初の非シングルトン次元に沿って動作します。

プログラミング ノート: nth_element は、C++ 標準ライブラリ アルゴリズム nth_element と partial_sort をカプセル化します。平均すると、この操作の複雑さは O(M*log(K)) です (ただし、 および )。この関数は、比率 K/M が小さい場合を対象としています。それ以外の場合は、 を使用する方がよい場合があります。 M = size (x, dim)K = length (n)sort

See also: sort, min, max.

: A_LO = tril (A)

: A_LO = tril (A, k)

: A_LO = tril (A, k, pack)

行列Aの下三角部分を抽出し、他のすべての要素をゼロに設定して形成された新しい行列を返します。

オプションの 2 番目の引数は、主対角線の上または下の何個の対角線もゼロに設定するかを指定します。kのデフォルト値はゼロで、主対角線が結果の一部として含まれます。 kの値がゼロ以外の整数の場合、要素の選択は、 k が正の場合は主対角線の上 k 対角線、負の場合は主対角線の下 k 対角線のオフセットから始まります。kの絶対値は、副対角線または上対角線の数より大きくすることはできません。

例1: 主対角線を除外する

tril (ones (3), -1)
    ⇒  0  0  0
        1  0  0
        1  1  0

例2: 最初の上対角線を含める

tril (ones (3), 1)
    ⇒  1  1  0
        1  1  1
        1  1  1

オプションの 3 番目の引数"pack"が指定された場合、抽出された要素は行列に挿入されず、列ごとに積み重ねられ、列ベクトルとして返されます。

See also: triu, istril, diag.

: A_UP = triu (A)

: A_UP = triu (A, k)

: A_UP = triu (A, k, pack)

行列Aの上三角部分を抽出し、他のすべての要素をゼロに設定して形成された新しい行列を返します。

オプションの 2 番目の引数は、主対角線の上または下の何個の対角線もゼロに設定するかを指定します。kのデフォルト値はゼロで、主対角線が結果の一部として含まれます。 kの値がゼロ以外の整数の場合、要素の選択は、 k が正の場合は主対角線の上 k 対角線、負の場合は主対角線の下 k 対角線のオフセットから始まります。kの絶対値は、副対角線または上対角線の数より大きくすることはできません。

例1: 主対角線を除外する

triu (ones (3), 1)
    ⇒  0  1  1
        0  0  1
        0  0  0

例2: 最初の下対角線を含める

triu (ones (3), -1)
    ⇒  1  1  1
        1  1  1
        0  1  1

オプションの 3 番目の引数"pack"が指定された場合、抽出された要素は行列に挿入されず、列ごとに積み重ねられ、列ベクトルとして返されます。

See also: tril, istriu, diag.

: v = vec (x)

: v = vec (x, dim)

行列xの列を積み重ねて得られたベクトルを返します 。

dimがない場合、これは と同等ですx(:)。

dimが指定されている場合、 vの次元は、 最後の次元に沿ったすべての要素とともに dimに設定されます。これは と同等です。 shiftdim (x(:), 1-dim)

See also: vech, resize, cat.

: v = vech (x)

正方行列xのすべての上対角要素を除去し、その結果を 1 列ずつ積み重ねて得られたベクトルを返します。

これは、基礎となる行列が対称であり、主対角線より上の値を保持することが無意味な行列計算で使用されます。

See also: vec.

: B = prepad (A, l)

: B = prepad (A, l, c)

: B = prepad (A, l, c, dim)

スカラー値cをベクトルAの長さがlになるまで 付加します。cが指定されていない場合は、値 0 が使用されます。

の場合、長さl のベクトルが得られるまで、Aの先頭から要素が削除されます。 length (A) > l

Aが行列の 場合、各行の先頭に要素が追加されたり、各行から要素が削除されます。

オプションの引数dimが指定されている場合は、この次元に沿って操作します。

dimがAの次元より大きい場合、結果は dim次元になります
See also: postpad, cat, resize.

: B = postpad (A, l)

: B = postpad (A, l, c)

: B = postpad (A, l, c, dim)

スカラー値cをベクトルAの長さがlになるまで 追加します。cが指定されていない場合は、値 0 が使用されます。

の場合、長さlのベクトルが得られるまで、Aの末尾から要素が削除されます。 length (A) > l

Aが行列の 場合、各行に要素が追加されたり、各行から要素が削除されます。

オプションの引数dimが指定されている場合は、この次元に沿って操作します。

dimがAの次元より大きい場合、結果は dim次元になります。

See also: prepad, cat, resize.

: M = diag (v)

: M = diag (v, k)

: M = diag (v, m, n)

: v = diag (M)

: v = diag (M, k)

対角kにベクトルvを持つ対角行列を返します。

2 番目の引数はオプションです。正の場合、ベクトルはk番目の上対角線上に配置されます。負の場合、 -k番目の下対角線上に配置されます。kのデフォルト値は0 で、ベクトルは主対角線上に配置されます。例:

diag ([1, 2, 3], 1)
  ⇒  0  1  0  0
      0  0  2  0
      0  0  0  3
      0  0  0  0

3 入力形式は、主対角線上にベクトルvを持つ対角行列を返します。結果の行列のサイズはm行 x n 列になります。

ベクトルの代わりに行列引数を指定すると、行列の kdiag番目の対角成分を抽出します

: M = blkdiag (A, B, C, …)

A、B、C、… からブロック対角行列を構築します。

すべての引数は数値であり、2 次元行列またはスカラーのいずれかである必要があります。引数のいずれかがスパース型の場合、出力もスパースになります。

See also: diag, horzcat, vertcat, sparse.