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

Matlab 计算单元格数组中所有元素的最佳方法?,matlab,cell,Matlab,Cell,我想计算单元格数组中的所有元素,包括“嵌套”单元格中的元素 对于单元数组 >> C = {{{1,2},{3,4,5}},{{{6},{7},{8}},{9}},10} C = {1x2 cell} {1x2 cell} [10] 答案应该是10 一种方法是反复使用[C{:}],直到没有剩余的单元格,然后使用numel,但必须有更好的方法?将其放入函数中(例如flatte.m)(代码来源: 然后执行numel(展平(C))以查找元素总数 如果您不喜欢创建一个单独的函数

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

对于单元数组

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

C = {1x2 cell}    {1x2 cell}    [10]
答案应该是
10

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

将其放入函数中(例如
flatte.m
)(代码来源:

然后执行
numel(展平(C))
以查找元素总数

如果您不喜欢创建一个单独的函数,可以使用下面这段聪明(但讨厌)的代码,使用匿名函数(代码来自:


无论哪种方式,您都需要递归以展平单元格数组,然后进行计数。

因为您只对元素的数量感兴趣,下面是一个简化版本,链接到:

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
结果是:

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

编辑: 如果您感到懒惰,我们可以让您进行计数:

hFig = figure('Visible','off');
num = numel( findobj(cellplot(C),'type','text') );
close(hFig)
基本上,我们创建一个不可见的图形,绘制单元格数组,计算创建了多少“文本”对象,然后删除不可见的图形

下面的情节是这样的:


查看CELLDISP和CELLPLOT等函数的源代码。答案是recursionok CELLPLOT的东西并不总是可靠的,那只是为了好玩:)+1只是为了CELLPLOT。直到现在才知道这件事=P
>> C = {{{1,2},{3,4,5}},{{{6},{7},{8}},{9}},10};
>> my_numel(C)
ans =
    10
hFig = figure('Visible','off');
num = numel( findobj(cellplot(C),'type','text') );
close(hFig)