セル配列の操作 メモ †基本 †セル配列は文字列も数値も格納できる.処理は速くないらしいが扱いやすい. A(xx,xx)
A{xx,xx}
()の括弧は配列をセルとして取り出すもの, セル配列の作成 †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になった.また,セルの中身が全て同じサイズの2次元配列 (ny, nx) で,セル配列 (Nx1) を3次元目の配列 (ny, nx, N) としたい場合は下記の通り. A = cat(3, A{:}); % 3は 3次元目の意.
セル配列の要素ごとに同じ関数を適用 †for文を使わずにセルの中で同じ処理を実行したいときに,cellfunが利用できる. >> 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
関数を渡すのに@を忘れないように. % 利用可能なフォント一覧を取得, Nx1 のセル配列 fonts = listfonts; % セル配列の中に 'Times' という文字列が含まれているかを判定 array_logical = cellfun(@(x) contains(x,'Times'), fonts); このように, @(x) function_name(x,args) とすることで,セルの中身を x をとして入力する無名関数ができる. |