您如何计算C#中给定数据集的移动平均值?

问题描述 投票:-1回答:1

因此,我使用随机生成的数据集,我需要找到用户输入的样本量的移动平均值。例如,数据集是一个包含{1、2、3、4、5、6、7、8、9、10}的列表,用户输入的样本大小为2。程序必须首先计算以下各项的平均值:1和2 = 1.5,2和3 = 2.5,3和4 = 3.5,等等。我该怎么做呢?谢谢! 😊

c# dataset sample moving-average
1个回答
0
投票

这可以通过一个简单的循环来完成。

for (int i = 0; i <= array.Length - samplesize; i++)
    Console.WriteLine(array.Skip(i).Take(samplesize).Average());

Skip(i).Take(samplesize)部分仅选择您当前感兴趣的元素。


0
投票

您可以跟踪总和并将所有值排队,这样您就可以在获得样本量后知道从总和中减去什么。

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个值(等于样本)和和排队。一旦获得所需数量的值进行平均,就得出总和除以样本大小,然后从队列中删除最旧的值,然后从总和中减去该值。请注意,如果样本大小大于值的数量,这将返回一个空的可枚举。

© www.soinside.com 2019 - 2024. All rights reserved.