34

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

背景:我使用a=cell(1,53). 然后我使用if exist(filename(i))和 textscan 来检查一个文件,并将其读入。结果,当filename(i)不存在时,会产生一个空单元格,然后我们转到下一个文件。

当我读完所有文件后,我想删除a. 我试过if a(i)==[]

4

2 回答 2

57

使用CELLFUN

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

注意:a(i)==[]不会工作。如果您想知道第 i 个单元格是否为空,则必须使用大括号来访问单元格的内容。此外,==[]计算结果为空,而不是true/ false,因此您应该使用该命令isempty。简而言之:a(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 回答