【发布时间】:2013-10-06 14:52:10
【问题描述】:
嗨,我在 matlab 中有一个单元格数组,其中单元格的长度不同。如何确定单元格的平均长度。
我试过了:
mean(length(mycell{:});
但是对于均值函数来说,输入太多了。
谢谢。
【问题讨论】:
嗨,我在 matlab 中有一个单元格数组,其中单元格的长度不同。如何确定单元格的平均长度。
我试过了:
mean(length(mycell{:});
但是对于均值函数来说,输入太多了。
谢谢。
【问题讨论】:
使用cellfun
mean( cellfun( @length, mycell ) )
顺便说一句,对于某些内置函数,编写起来可能会更好
mean( cellfun( 'length', mycell ) )
【讨论】:
如果您的元胞数组仅包含行向量或仅列向量,则有另一种方法不使用cellfun。
如果您的元胞数组包含行向量:使用以下任一:
length([mycell{:}])/numel(mycell)
length(horzcat(mycell{:}))/numel(mycell)
如果您的元胞数组包含列向量:
length(vertcat(mycell{:}))/numel(mycell)
如果元胞数组很小,这个答案比@Shai's 快。对于中等或大尺寸,或作为一般答案,他的解决方案(第二版)更好。
【讨论】:
[mycell{:}] 实际上将单元格数组的内容分配并复制到临时变量中只是为了测试它的长度。我目前无法访问 Matlab,但测试哪种方法确实更快会很有趣。
cellfun,但你是对的,对于大向量它实际上可能更慢
cellfun 不一定比其他选项慢。
cellfun 和'length' 是最快的。我正在更新我的答案
mycell = num2cell(ones(1,20)); 是最快的(但是当单元阵列很小时,提高速度可能并不那么重要)