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)