2010-08-03 51 views
34

如何检测单元阵列中的空单元格?我知道删除空单元的命令是a(1) = [],但我似乎无法让MATLAB自动检测哪些单元是空的。如何检测单元阵列中的空单元格?

背景: 我预分配使用a=cell(1,53)单元阵列。 然后我用if exist(filename(i))和textscan来检查文件,并在阅读。其结果是,当filename(i)不存在,空单元格的结果和我们移动到下一个文件。

当我看完了所有的文件,我想删除的a空细胞。我试图if a(i)==[]

回答

53

使用CELLFUN

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

注:a(i)==[]将无法​​正常工作。如果您想知道第i个单元格是否为空,则必须使用大括号来访问单元格的内容。此外,==[]计算结果为空,而不是true/false,所以你应该使用命令isempty代替。总之:a(i)==[]应改写为isempty(a{i})

+15

用于速度使用的轻微改善'emptyCells = cellfun( '的isEmpty',A);'...'cellfun'具有内部'开关'语句,用于检查字符串是否是一小部分函数中的一个,它可以用“魔术”速度增加......这在这里描述:http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill 2010-08-04 15:18:33

+0

+1用于指定如何删除空单元格!这将为您留下仅包含非空条目的单元格数组! – Matteo 2014-06-09 19:12:35

0

上述所有的答案是不正确的,因为在我的情况下,当我使用它们,它们除去空细胞,然后位于一排的方式,而不是保持它们的实际形状我的单元阵列的所有元素。实际上,在使用这种方法之后,您的单元格数组元素倾向于是一个行单元格矢量。

我发现这种方法这在我的情况下正常工作。

源:https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90

方法:

myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), :) = []; 
相关问题