计算单元格数组中所有元素的最佳方法?

Not*_*tyf 6 matlab cell

我想计算单元格数组中的所有元素,包括"嵌套"单元格中的元素.

对于单元阵列

>> C = {{{1,2},{3,4,5}},{{{6},{7},{8}},{9}},10}

C = {1x2 cell}    {1x2 cell}    [10]
Run Code Online (Sandbox Code Playgroud)

答案应该是10.

一种方法是[C{:}]反复使用,直到没有剩下的细胞然后使用numel但必须有更好的方法?

Amr*_*mro 9

既然你只在感兴趣元素的个数,这里是一个简化版本flatten.m@Ansari链接:

function n = my_numel(A)
    n = 0;
    for i=1:numel(A)
        if iscell(A{i})
            n = n + my_numel(A{i});
        else
            n = n + numel(A{i});
        end
    end
end
Run Code Online (Sandbox Code Playgroud)

结果:

>> C = {{{1,2},{3,4,5}},{{{6},{7},{8}},{9}},10};
>> my_numel(C)
ans =
    10
Run Code Online (Sandbox Code Playgroud)

编辑:

如果你感到懒惰,我们可以让CELLPLOT进行计数:

hFig = figure('Visible','off');
num = numel( findobj(cellplot(C),'type','text') );
close(hFig)
Run Code Online (Sandbox Code Playgroud)

基本上我们创建一个不可见的图形,绘制单元格数组,计算创建了多少"文本"对象,然后删除不可见的图形.

这是情节在下面的样子:

截图