如何检测单元格数组中的空单元格?我知道删除空单元格的命令是a(1) = []
,但我似乎无法让 MATLAB 自动检测哪些单元格是空的。
背景:我使用a=cell(1,53)
. 然后我使用if exist(filename(i))
和 textscan 来检查一个文件,并将其读入。结果,当filename(i)
不存在时,会产生一个空单元格,然后我们转到下一个文件。
当我读完所有文件后,我想删除a
. 我试过if a(i)==[]
如何检测单元格数组中的空单元格?我知道删除空单元格的命令是a(1) = []
,但我似乎无法让 MATLAB 自动检测哪些单元格是空的。
背景:我使用a=cell(1,53)
. 然后我使用if exist(filename(i))
和 textscan 来检查一个文件,并将其读入。结果,当filename(i)
不存在时,会产生一个空单元格,然后我们转到下一个文件。
当我读完所有文件后,我想删除a
. 我试过if a(i)==[]
使用CELLFUN
%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];
注意:a(i)==[]
不会工作。如果您想知道第 i 个单元格是否为空,则必须使用大括号来访问单元格的内容。此外,==[]
计算结果为空,而不是true
/ false
,因此您应该使用该命令isempty
。简而言之:a(i)==[]
应该改写为isempty(a{i})
.
上面提到的所有答案都是不正确的,因为在我使用它们的情况下,它们删除了空单元格,然后我的单元格数组的所有元素都以行方式排列,而不是保留它们的实际形状。事实上,在使用这种方法后,您的单元格数组元素往往是行单元格向量。
我发现这种方法在我的情况下可以正常工作。
来源:https ://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90
方法:
myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];