Matlab 如何检测单元格数组中的空单元格?

Matlab 如何检测单元格数组中的空单元格?,matlab,cell-array,is-empty,Matlab,Cell Array,Is Empty,如何检测单元格数组中的空单元格?我知道删除空单元格的命令是a(1)=[],但我似乎无法让MATLAB自动检测哪些单元格是空的 背景: 我使用a=cell(1,53)预先分配了一个单元格数组。 然后我使用if-exist(filename(I))和textscan检查文件,并将其读入。因此,当文件名(i)不存在时,将产生一个空单元格,我们将进入下一个文件 当我读完所有文件后,我想删除a的空单元格。我尝试了如果a(I)=[]使用 注意:a(i)=[]不起作用。如果您想知道第i个单元格是否为空,则必须

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

背景: 我使用
a=cell(1,53)
预先分配了一个单元格数组。 然后我使用
if-exist(filename(I))
和textscan检查文件,并将其读入。因此,当
文件名(i)
不存在时,将产生一个空单元格,我们将进入下一个文件

当我读完所有文件后,我想删除
a
的空单元格。我尝试了
如果a(I)=[]
使用


注意:
a(i)=[]
不起作用。如果您想知道第i个单元格是否为空,则必须使用花括号来访问单元格的内容。另外,
=[]
计算结果为空,而不是
true
/
false
,因此您应该使用命令
isempty
。简而言之:
a(i)=[]
应该重写为
isempty(a{i})
以上提到的所有答案都是不正确的,因为在我使用它们时,它们删除了空单元格,然后以行的方式删除了单元格数组中的所有元素,而不是保留它们的实际形状。事实上,在使用这种方法之后,您的单元数组元素往往是一个行单元向量

我发现这种方法在我的案例中是正确的

资料来源:

方法:

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

要稍微提高速度,请使用
emptyCells=cellfun('isempty',a)
cellfun
有一个内部
switch
语句,它检查字符串是否是少数几个函数中的一个,它可以通过。。。此处描述:+1用于指定如何删除空单元格!这将给您留下一个仅包含非空条目的单元格数组!十年后,
'isempty'
仍然比
@isempty
快70倍。
myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];