如何根据列值计算矩阵的均值

时间:2014-01-03 22:51:15

标签: arrays matlab mean

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

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

其中it在循环中的范围是1到3,i包含最后一列= 1的行的所有索引。当我运行此代码时,我得到Sub scripted assignment dimension mismatch error。任何人都可以指出命令中的错误吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分: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
    
  3. 使用示例数据,上述任何一个都给出了

    result =
        0.5667    0.5000    0.4333
        0.3000    0.3000    0.4500
        0.4000    0.4000    0.7000