【问题标题】:average matrix from cell array in matlabmatlab中单元格数组的平均矩阵
【发布时间】:2016-06-26 02:56:01
【问题描述】:

我遇到了一个与元胞数组相关的问题。我有一个单元格数组 X(size-400),每个元素都是一个大小为 (1x100) 的矩阵。我想得到平均矩阵,以便得到 1x100 的结果。我尝试了 cellfun 和前面讨论的其他方法。我无法得到想要的结果。我可以在不将单元格数组转换为矩阵的情况下做到这一点吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    我会这样做:将所有 1×100 向量垂直连接成一个矩阵,然后计算每列的平均值:

    x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
    result = mean(vertcat(x{:}), 1); % concatenate vertically. Mean of each column
    

    在这个例子中,

    result =
        7.3333    3.0000    5.0000    4.0000
    

    如果你真的想避免矩阵,你可以使用循环来累加值:

    x = {[9 4 5 4] [5 3 6 7] [8 2 4 1]}; % example cell array of 3 vectors of size 1×4
    result = zeros(size(x{1})); % initiallize
    for k = 1:numel(x)
        result = result + x{k}; % accumulate values
    end
    result = result / numel(x); % divide to obtain mean
    

    【讨论】:

    • 谢谢,第一个简单紧凑
    【解决方案2】:

    您是否正确使用了cellfun? 让我们举一个测试单元的例子,每个单元有 4 个元素,大小为 3

    >> Cell1 = {[4 3 5 3], [1 2 3 4], [7 8 9 6]}
    
    Cell1 = 
    
        [1x4 double]    [1x4 double]    [1x4 double]
    

    使用匿名函数x,然后cellfun 取x 的每个单元格的平均值,在我们的例子中是Cell1,最后我们取结果矩阵的平均值

      mean(cellfun(@(x)  mean(x),Cell1))
    
      ans =
    
           4.5833
    

    【讨论】:

    • 感谢奥马尔的回答。我希望它像 (4+1+7)/3,而不是每个单元格的单独平均值。还是谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-10-21
    • 2017-10-30
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-03
    • 2017-09-23
    相关资源
    最近更新 更多