セル配列の操作 メモ

とあるセル配列Aがあると仮定する.

基本

セル配列は文字列も数値も格納できる.処理は速くないらしいが扱いやすい.
原則,下記のように2種類の表記ができる.慣れるまでややこしい.

A(xx,xx)
A{xx,xx}

()の括弧は配列をセルとして取り出し, {}の括弧はセルの括弧を外し,配列の中身自体を見るものだと思っておけば良い.
A{xx,xx}はセルの括弧を外しているので,cell2matは不要.
セルの中にセルを入れることもできるので,どれに着目しているのかは注意を払う必要がある.

セル配列の作成

ny行nx列のセル配列を作成する.各要素には空行列が入る.

A = cell(ny,nx);

セル配列の削除

セルの配列自体を消す.下記は5行目以降消したいとき.

A(5:end,:) = [];

セル配列の要素の中身を削除

セルのある要素の中身を消す.下記の操作後も,配列Aの要素数は変わらずに,消した要素には空行列が残る.

A{row,col} = [];

セルから数値のmatrixに変換

全て数値で中身がmatrixになっていれば可能.

AA = cell2mat(A(row,col));

セルの配列の結合

互いに1行か1列で列数と行数が一致していれば可能.

AA = vertcat(A{:,col});
BB = horzcat(A{row,:});

ちなみにN行1列のセルで

A = vertcat(A);
だと何も起きず,
A = vertcat(A{:});
にすると全部統合されて1つのmatrixになった.

セル配列の要素ごとに同じ関数を適用

for文を使わずにセルの中で同じ処理を実行したいときに,cellfunが利用できる.
下の例は,セル要素の中身が空かどうか(isempty)をそれぞれの要素で実行したもの.

>> A = cell(2,2);
>> b = cellfun(@isempty,A)
b =
  2×2 logical array
   1   1
   1   1

>> A{2,1} = zeros(5,5); 
>> b = cellfun(@isempty,A)
b =
  2×2 logical array
   1   1
   0   1

関数を渡すのに@を忘れないように.
@で自作の関数を定義すればそれを利用することもできる.


Front page   Edit Diff Attach Copy Rename Reload   New List of pages Search Recent changes   Help   RSS of recent changes
Last-modified: 2018-11-05 (Mon) 08:00:04 (14d)