在 MATLAB 中查找区间内变量的平均值

Find average value of variable in an interval in MATLAB

我在 MATLAB 中有一些数据。在图片上你可以看到一小部分:-

我感兴趣的数字是 RPM 和 Lambda。如您所见,它们既没有严格减少也没有增加(可以说它们是非线性的)。我想找到 RPM 间隔的平均 Lambda 值,例如 250-500、500-750、1000-1250 等等。但是我不知道如何在 MATLAB 中编写这样的代码,原因是我不知道这会在什么索引处发生,因为 RPM 数字不是严格的 decreasing/increasing.

while RPM >= 1000 && RPM < 1250
    Lambda_avg = sum of Lambda values in interval / number of Lambdas in interval
end

while RPM >= 1250 && RPM < 1500
...
end

我也许可以将 RPM 列从最低到最高排序,然后相应地对 Lambda 列进行排序,尽管我也不确定该怎么做。

有什么方法可以找到所有数据中特定 RPM 间隔内的平均 lambda 值?我希望我的问题足够清楚。

如果你在变量 lambda 中有所有 lambda 的值,在 RPM 变量中有所有 RPM 的值,那么你就这样做,例如

RPM1 = 1000;
RPM2 = 1500;
lambda_avg = mean(lambda((RPM >= RPM1) & (RPM < RPM2)));

单个 & 进行逐个元素的 AND 比较,单个 | 进行逐元素 OR。

例如,如果您的数据组织为名为 data 的 MATLAB Table,那么您可以执行

lambda_avg = mean(data.lambda((data.RPM >= RPM1) & (data.RPM < RPM2)));

此方法利用了 MATLAB 的逻辑索引功能,并允许您跳过您在问题中尝试编写的循环...

仅供参考,如果你想显式写一个循环来计算这个均值,你可以这样做:

lambda_avg = 0;
n_lambda = 0; % number of lambdas you found in the interval
for i = 1:numel(RPM)
    if (RPM(i) >= RPM1) && (RPM(i) < RPM2)
        lambda_avg = lambda_avg + lambda(i);
        n_lambda = n_lambda + 1;
    end
end
lambda_avg = lambda_avg / n_lambda;