代码之家  ›  专栏  ›  技术社区  ›  lighting

在分布范围内查找for循环的平均值

  •  0
  • lighting  · 技术社区  · 6 年前

    我有如下数据:

    49.6    46.1
    49.65   46.3
    50.1    47.03
    50.2    47.06
    51.35   46.027
    51.36   46.20
    

    我想根据第一列的特定范围找到两列的平均值。例如,在范围[49-50]中,我应该计算第一列的平均值和第二列相应值的平均值。在本例中,带有数字的子数组(仅第一列)

    49.6    
    49.65   
    

    将在[49-50]范围内,因此我想找到它们的平均值和第2列中相应值的平均值。

    范围应该是 49:1:100 。下面的代码不能正常工作。

    for i=49:1:100
        meanWithinRange(i) = mean(data(i,1));
    end
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Cris Luengo    6 年前

    我认为您正在寻找逻辑索引。

    首先,为列1的范围内值创建逻辑数组:

    A=[49.6    46.1
       49.65   46.3
       50.1    47.03
       50.2    47.06
       51.35   46.027
       51.36   46.20];
    
    I = A(:,1)>=49 & A(:,1)<50;
    

    i是逻辑列向量,并且 true 用于范围内的行。您可以使用它为所需的行编制索引:

    >> A(I,:)
    ans =
       49.6000   46.1000
       49.6500   46.3000
    

    现在你可以简单地计算 mean 结果如下:

    >> mean(A(I,:))
    ans =
       49.6250   46.2000