如何检测单元阵列中的空单元格?我知道删除空单元的命令是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), :) = [];
用于速度使用的轻微改善'emptyCells = cellfun( '的isEmpty',A);'...'cellfun'具有内部'开关'语句,用于检查字符串是否是一小部分函数中的一个,它可以用“魔术”速度增加......这在这里描述:http://undocumentedmatlab.com/blog/cellfun-undocumented-performance -boost/ – JudoWill 2010-08-04 15:18:33
+1用于指定如何删除空单元格!这将为您留下仅包含非空条目的单元格数组! – Matteo 2014-06-09 19:12:35