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), : ) = [];