【问题标题】:determine average length of cells in a cell array [duplicate]确定单元格数组中单元格的平均长度
【发布时间】:2013-10-06 14:52:10
【问题描述】:

嗨,我在 matlab 中有一个单元格数组,其中单元格的长度不同。如何确定单元格的平均长度。

我试过了:

mean(length(mycell{:});

但是对于均值函数来说,输入太多了。

谢谢。

【问题讨论】:

    标签: matlab cell average


    【解决方案1】:

    使用cellfun

    mean( cellfun( @length, mycell ) )
    

    顺便说一句,对于某些内置函数,编写起来可能会更好

    mean( cellfun( 'length', mycell ) )
    

    【讨论】:

    • 太好了,非常感谢。
    【解决方案2】:

    如果您的元胞数组仅包含行向量或仅列向量,则有另一种方法不使用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)); 是最快的(但是当单元阵列很小时,提高速度可能并不那么重要)
    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2011-01-18
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多