matlab:在没有循环的情况下从单元格数组中的每个矩阵中删除零行
matlab: delete zero rows from each matrix in cell-array without loop
我的元胞数组如下所示:
>> 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)'
那么有什么绝妙的解题方法吗?谢谢
如果您使用的是内置函数 nonZeros,您应该键入它 nonzeros
,因为 Matlab 区分大小写。 (自 2011ish)。
正如另一个答案提到的,您需要使用 nonzeros
但即使您这样做,输出的顺序也不会被保留。相反,您可以
试试这个:
out = cellfun(@(x) x(any(x,2),:),C,'UniformOutput',false);
使用celldisp
显示元胞数组
celldisp(out);
我的元胞数组如下所示:
>> 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)'
那么有什么绝妙的解题方法吗?谢谢
如果您使用的是内置函数 nonZeros,您应该键入它 nonzeros
,因为 Matlab 区分大小写。 (自 2011ish)。
正如另一个答案提到的,您需要使用 nonzeros
但即使您这样做,输出的顺序也不会被保留。相反,您可以
试试这个:
out = cellfun(@(x) x(any(x,2),:),C,'UniformOutput',false);
使用celldisp
celldisp(out);