34

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

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

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

4

2 に答える 2

57

セルファンを使う

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

注:a(i)==[]動作しません。i 番目のセルが空かどうかを知りたい場合は、中かっこを使用してセルの内容にアクセスする必要があります。また、/==[]の代わりに空と評価されるため、代わりにコマンドを使用する必要があります。要するに:のように書き換える必要があります。truefalseisemptya(i)==[]isempty(a{i})

于 2010-08-03T20:34:11.060 に答える
0

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

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

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

アプローチ:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];
于 2015-06-23T10:28:44.213 に答える