我的单元格数组如下所示:
>> celldisp(C)
C{1} =
4 2 7 10
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
C{2} =
4 2 7 10
8 2 8 8
0 0 0 0
0 0 0 0
0 0 0 0
C{3} =
4 2 7 10
8 2 8 8
8 4 1 6
0 0 0 0
0 0 0 0
C{4} =
4 2 7 10
8 2 8 8
8 4 1 6
3 1 3 4
0 0 0 0
C{5} =
4 2 7 10
8 2 8 8
8 4 1 6
3 1 3 4
3 2 3 9
现在我想删除所有用零填充的行,所以我可以让单元看起来像这样:
C{1} =
4 2 7 10
C{2} =
4 2 7 10
8 2 8 8
C{3} =
4 2 7 10
8 2 8 8
8 4 1 6
C{4} =
4 2 7 10
8 2 8 8
8 4 1 6
3 1 3 4
C{5} =
4 2 7 10
8 2 8 8
8 4 1 6
3 1 3 4
3 2 3 9
如何在没有任何循环的情况下执行此操作? PS:我试图使用
'cellfun(@(c_el) nonZeros(c_el), C,'UniformOutput',false)'
但是matlab显示
Undefined function 'nonZeros' for input arguments of type 'double'.
Error in @(c_el)nonZeros(c_el)'
那么有什么好方法可以解决问题吗?感谢。
答案 0 :(得分:2)
正如其他答案所提到的,你需要使用nonzeros
,但即使这样做,输出的顺序也不会被保留。相反,你可以
试试这个:
out = cellfun(@(x) x(any(x,2),:),C,'UniformOutput',false);
使用celldisp
celldisp(out);
答案 1 :(得分:0)
如果您使用内置函数nonZeros,则应键入nonzeros
,因为Matlab区分大小写。 (自2011年起)。