首页 > 解决方案 > 在 for 循环中查找分布范围内的平均值

问题描述

我有如下数据:

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) 的范围内,所以我想找到它们的平均值以及第二列中相应值的平均值。

范围就像49:1:100. 下面的代码不能正常工作。

for i=49:1:100
    meanWithinRange(i) = mean(data(i,1));
end

标签: matlabfor-loopmatrixmean

解决方案


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

首先,为第 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

推荐阅读