Что-то простое, как это могло бы помочь.
static class Extensions
{
public static IEnumerable<double> MovingAverage(this double[] numbers, int runs)
{
for (var i = 0; i < numbers.Length - runs + 1; i++)
yield return Enumerable.Range(i, runs).Average(idx => numbers[idx]);
}
}
Вариант использования:
foreach (var number in new[] {1d, 2d, 7d, 4d, 5}.MovingAverage(2))
Console.WriteLine(number);