6.3.2 Creating Cell Arrays

Last-modified: 2025-03-21 (金) 21:13:27

6.3.2 セル配列の作成

入門例 (セル配列の基本的な使用法を参照) では、現在使用可能な変数を含むセル配列を作成する方法を示しました。ただし、多くの場合、セル配列を作成してからデータを入力すると便利です。

このcell関数は、空の行列を含む指定されたサイズのセル配列を返します。この関数は、zeros 新しい数値配列を作成する関数に似ています。次の例では、空の行列を含む2行2列のセル配列を作成します。

c = cell (2,2)
    ⇒ c =
        {
          [1,1] = [](0x0)
          [2,1] = [](0x0)
          [1,2] = [](0x0)
          [2,2] = [](0x0)
        }

数値配列と同様に、セル配列も多次元にすることができます。この cell関数は、返されるセル配列のサイズを表すために、任意の数の正の整数を受け入れます。また、正の整数のベクトルを使用してセル配列のサイズを設定することもできます。次の例では、同じサイズのセル配列が 2 つ作成され、最初のセル配列のサイズが表示されます。

c1 = cell (3, 4, 5);
c2 = cell ( [3, 4, 5] );
size (c1)
    ⇒ ans =
        3   4   5

このとおり、size関数はセル配列でも機能します。 length、numel、 rows、columnsなど、オブジェクトのサイズを記述する他の関数も同様です。

: C = cell (n)

: C = cell (m, n)

: C = cell (m, n, k, …)

: C = cell ([m n …])

新しいセル配列オブジェクトを作成します。

単一のスカラー整数引数で呼び出された場合は、NxN の正方形セル配列を返します。2 つ以上のスカラー整数引数、または整数値のベクトルで呼び出された場合は、指定された次元の配列を返します。

See also: cellstr, mat2cell, num2cell, struct2cell.

空のセル配列を作成してからそれを埋める代わりに、、、および関数を使用して数値配列をセル配列に変換することも num2cellできmat2cellますcellslices。

: C = num2cell (A)

: C = num2cell (A, dim)
数値行列Aをセル配列に変換します。

dimが指定されていない場合、Aの各要素は出力Cの 1x1 要素になります。

dimが定義されている場合、 Cの個々の要素には、指定された次元に沿った Aのすべての要素が含まれます。dimは、同じルールが適用された次元のベクトルである場合もあります。

例えば:

x = [1,2;3,4]
⇒
   1    2
   3    4
## each element of A becomes a 1x1 element of C
num2cell (x)
  ⇒
     {
       [1,1] =  1
       [2,1] =  3
       [1,2] =  2
       [2,2] =  4
     }
## all rows (dim 1) of A appear in each element of C
num2cell (x, 1)
  ⇒
     {
       [1,1] =
          1
          3
       [1,2] =
          2
          4
     }
## all columns (dim 2) of A appear in each element of C
num2cell (x, 2)
  ⇒
     {
       [1,1] =
          1   2
       [2,1] =
          3   4
     }
## all rows and cols appear in each element of C
## (hence, only 1 output)
num2cell (x, [1, 2])
  ⇒
     {
       [1,1] =
          1   2
          3   4
     }

See also: mat2cell.

: C = mat2cell (A, dim1, dim2, …, dimi, …, dimn)

: C = mat2cell (A, rowdim)

行列Aをセル配列Cに変換します。

各次元引数 ( dim1、dim2など) は、その次元の要素を出力Cの新しい要素間でどのように分割するかを指定する整数のベクトルです。 i番目の次元の要素数は です。 Aのすべての要素 を分割する必要があるため、 という要件があります。出力セルCのサイズは、numel ( dim1 ) x numel ( dim2 ) x … x numel ( dimn ) です。 size (A, i)sum (dimi) == size (A, i)

単一次元引数rowdimが指定されると、出力は指定どおりに行に分割されます。他のすべての次元は分割されないため、すべての列 (dim 2)、ページ (dim 3) などが各出力要素に表示されます。

x = reshape (1:12, [3, 4])'
⇒
   1    2    3
   4    5    6
   7    8    9
  10   11   12
## The 4 rows (dim1) are divided in to two cell elements
## with 2 rows each.
## The 3 cols (dim2) are divided in to three cell elements
## with 1 col each.
mat2cell (x, [2,2], [1,1,1])
⇒
{
 [1,1] =
    1
    4
 [2,1] =
     7
    10
 [1,2] =
    2
    5
 [2,2] =
     8
    11
 [1,3] =
    3
    6
 [2,3] =
     9
    12
}
## The 4 rows (dim1) are divided in to two cell elements
## with a 3/1 split.
## All columns appear in each output element.
mat2cell (x, [3,1])
⇒
{
 [1,1] =
    1   2   3
    4   5   6
    7   8   9
 [2,1] =
    10   11   12
}

See also: num2cell, cell2mat.

: sl = cellslices (x, lb, ub, dim)

配列xが与えられると、この関数は、それぞれ下限と上限の インデックス ベクトルlb、ubによって決定される配列からスライスのセル配列を生成します。

つまり、次のコードと同等です。

n = length (lb);
sl = cell (1, n);
for i = 1:length (lb)
 sl{i} = x(:,...,lb(i):ub(i),...,:);
endfor

インデックスの位置はdimによって決定されます。指定されていない場合は、最初の非シングルトン次元に沿ってスライスが行われます。
See also: cell2mat, cellindexmat, cellfun.