c# - 如何计算 C# 中给定数据集的移动平均值?
问题描述
所以我使用一个随机生成的数据集,我需要找到用户输入的样本大小的移动平均值。例如,数据集是一个包含 {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 的列表,用户输入的样本量为 2。程序必须首先计算:1和 2 = 1.5、2 和 3 = 2.5、3 和 4 = 3.5,以此类推。我该怎么做呢?谢谢!
解决方案
您可以跟踪总和并将所有值排队,这样您就知道在达到样本大小后要从总和中减去什么。
public static IEnumerable<decimal> MovingAverages(IEnumerable<decimal> values, int sample)
{
var queue = new Queue<decimal>(sample);
decimal sum = 0;
foreach(var x in values)
{
sum += x;
queue.Enqueue(x);
if(queue.Count == sample)
{
yield return sum / sample;
sum -= queue.Dequeue();
}
}
}
基本上这会将前 n 个值(等于样本)和总和排队。一旦获得所需数量的值进行平均,它就会产生总和除以样本大小,然后从队列中删除最旧的值并从总和中减去它。请注意,如果样本大小大于值的数量,这将返回一个空的可枚举。
推荐阅读
- java - 在 Ant Design 中获取成功警报消息的文本并使用 Selenium 进行验证
- reactjs - 如何使用 axios 通过 webpack 开发服务器向远程服务器上的 API 发送请求
- android - 如何使我的应用程序包含在文件管理器中每个 txt 文件的“打开方式”或“共享”中?
- android - 用户是否可以在运行时查看变量?
- c# - 在 Linux 上使用 ONVIF 的 .wsdl 文件生成 C# 脚本
- deployment - 以下部署策略在 Kubernetes 中意味着什么?
- ruby - 如何使用三元运算符将值推送到数组?
- android - 与 iOS 相比,Flutter 在 android 中播放音频花费了太多时间
- python - 部署电子商务django项目
- javascript - Focus out on enter press not working properly