web-dev-qa-db-ja.com

セル配列内の空のセルを検出するにはどうすればよいですか?

セル配列内の空のセルを検出するにはどうすればよいですか?空のセルを削除するコマンドはa(1) = []ですが、MATLABにどのセルが空であるかを自動的に検出させることはできません。

背景:a=cell(1,53)を使用してセル配列を事前に割り当てました。次に、if exist(filename(i))とtextscanを使用してファイルをチェックし、読み込みました。その結果、filename(i)が存在しない場合、空のセルが生成され、次のセルに移動しますファイル。

すべてのファイルの読み取りが終了したら、aの空のセルを削除したいと思います。 if a(i)==[]を試しました

34
N.C. Rolly

[〜#〜] cellfun [〜#〜] を使用します

_%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];
_

注:a(i)==[]は機能しません。 i番目のセルが空かどうかを知りたい場合は、中括弧を使用してセルのコンテンツにアクセスする必要があります。また、_==[]_はtrue/falseではなく空と評価されるため、代わりにisemptyコマンドを使用する必要があります。要するに:a(i)==[]isempty(a{i})に書き換える必要があります。

55
Jonas

上記の答えはすべて間違っています。私の場合、私がそれらを使用したとき、空のセルを削除し、実際の形状を維持するのではなく、セル配列のすべての要素が行状に配置されていたためです。実際、この種のアプローチを使用した後、セル配列要素は行セルベクトルになる傾向があります。

私の場合は正しく機能するこのアプローチを見つけました。

ソース: https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u9

アプローチ:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];
0
Mahdi Karami