如何检测单元阵列中的空单元格?

时间:2010-08-03 20:27:02

标签: matlab cell-array is-empty

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

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

当我读完所有文件后,我想删除a的空单元格。我试过了if a(i)==[]

2 个答案:

答案 0 :(得分:55)

使用CELLFUN

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

注意:a(i)==[]无效。如果您想知道第i个单元格是否为空,则必须使用大括号来访问单元格的内容。此外,==[]评估为空,而不是true / false,因此您应该使用命令isempty。简而言之:a(i)==[]应改写为isempty(a{i})

答案 1 :(得分:0)

以上提到的所有答案都是错误的,因为在我使用它们的情况下,它们删除了空单元格,然后我的单元格数组的所有元素都以行方式排列,而不是保留它们的实际形状。实际上,在使用这种方法后,您的单元数组元素往往是行单元格向量。

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

来源:Pagerfanta

的方法:

{{1}}