Как вы рассчитываете для скользящего среднего данного набора данных в C #? - PullRequest
0 голосов
/ 30 октября 2019

Поэтому я использую случайно сгенерированный набор данных, и мне нужно найти скользящее среднее от размера выборки, введенного пользователем. Например, набор данных представляет собой список с {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, а размер выборки, введенный пользователем, равен 2. Программа должна сначала рассчитать среднее значение: 1и 2 = 1,5, 2 и 3 = 2,5, 3 и 4 = 3,5 и т. д. Как мне это сделать? Спасибо! ?

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Вы можете отслеживать сумму и ставить в очередь все значения, чтобы вы знали, что вычесть из суммы, как только вы доберетесь до размера выборки.

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();
        }
    }
}

По сути, это приведет к очереди первыхзначения (равные выборке) и сумма. Как только он получает желаемое количество значений для усреднения, он возвращает сумму, деленную на размер выборки, а затем удаляет самое старое значение из очереди и вычитает его из суммы. Обратите внимание, что если размер выборки превышает количество значений, возвращается пустой список.

0 голосов
/ 30 октября 2019

Это можно сделать с помощью простого цикла.

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

Часть Skip(i).Take(samplesize) выбирает только те элементы, которые вам интересны в данный момент.

...