【问题标题】:How to calculate mean of matrix based on column value如何根据列值计算矩阵的平均值
【发布时间】:2014-01-21 17:50:29
【问题描述】:

我有 N*4 暗淡的 B 矩阵。我想根据最后一列值计算矩阵的平均值。最后一列具有 1 到 3 范围内的重复值。我想计算最后一列具有相同值的所有行的平均值。 我正在使用这个命令:

l(it:,)=mean(B(i,:)) 

其中it 在循环中的范围从 1 到 3,i 具有最后一列 = 1 的所有行的索引。当我运行此代码时,我得到 Sub scripted assignment dimension mismatch error。谁能指出命令中有什么问题?

【问题讨论】:

    标签: arrays matlab mean


    【解决方案1】:

    考虑以下示例数据:

    B = [ 0.4000    0.3000    0.2000    1.0000
          0.3000    0.2000    0.1000    2.0000
          0.7000    0.8000    0.6000    1.0000
          0.3000    0.4000    0.8000    2.0000
          0.7000    0.5000    0.5000    3.0000
          0.1000    0.3000    0.9000    3.0000
          0.6000    0.4000    0.5000    1.0000 ];
    

    两种可能的方法:

    1. 使用logical indexing

      result = NaN(3,3);
      for k = 1:3
          result(k,:) = mean(B(B(:,4)==k,1:3));
      end
      
    2. 使用accumarray

      result = NaN(3,3);
      for k = 1:3
          result(:,k) = accumarray(B(:,4), B(:,k), [], @mean, NaN);
      end
      

    使用示例数据,以上任何一个都给出了

    result =
        0.5667    0.5000    0.4333
        0.3000    0.3000    0.4500
        0.4000    0.4000    0.7000
    

    【讨论】:

    • 即使我尝试运行您的代码,我也会得到下标分配维度不匹配。可能出了什么问题?
    • 我无法理解这一行 result(k,:) = mean(B(B(:,4)==k,1:3));你能解释一下吗??
    • 当我增加矩阵的列数并改变结果的暗淡时,我得到下标赋值维度不匹配。
    • @KeerthanaPraveen 该行计算最后一列中具有值k 的所有行的平均值
    【解决方案2】:

    你的问题不是最清楚的,但我认为我知道你想做什么。

    您说i 包含每个值 1、2、3 的感兴趣行的索引,所以我假设您需要

     mean_k = mean(mean((B(i,:)))
    

    对于每个 k = 1,2,3。显然,在识别相关的相关行时,每次迭代 1、2、3 时,您都必须重新计算 i

    mean 函数在矩阵上调用时不返回标量,它返回一个行向量,其元素是矩阵每一列的平均值。因此,要获得平均值,您需要在结果上再次调用mean

    请记住,这还包括总体平均计算中的最终列值(用于分类)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-04
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      相关资源
      最近更新 更多