Exemple #1
0
    public static IEnumerable <double> AverageWindow(this IEnumerable <double> samples, int WindowLength)
    {
        if (samples is null)
        {
            throw new ArgumentNullException(nameof(samples));
        }
        switch (WindowLength)
        {
        case < 1: throw new ArgumentOutOfRangeException(nameof(WindowLength), WindowLength, "Длина окна должна быть больше 0");

        case 1:
        {
            foreach (var sample in samples)
            {
                yield return(sample);
            }
            yield break;
        }
        }

        var average = new AverageValue(WindowLength);

        foreach (var sample in samples)
        {
            yield return(average.AddValue(sample));
        }
    }
Exemple #2
0
        public void AddValue_Test()
        {
            const int count   = 10;
            var       data    = Enumerable.Range(0, count).Select(n => (double)n).ToArray();
            var       average = data.Average();

            var average_value = new AverageValue();

            foreach (var v in data)
            {
                average_value.AddValue(v);
            }

            Assert.AreEqual(average, average_value.Value);
        }
Exemple #3
0
        public void RollingAverage_Test()
        {
            const int count = 10;
            var       data  = Enumerable.Range(0, count).Select(n => (double)n).ToArray();

            var average_value = new AverageValue();

            var expected = new double[data.Length];
            var actual   = new double[data.Length];

            for (var i = 0; i < data.Length; i++)
            {
                actual[i]   = average_value.AddValue(data[i]);
                expected[i] = data.Take(i + 1).Average();
            }

            CollectionAssert.AreEqual(expected, actual);
        }
Exemple #4
0
        public static IEnumerable <float> RollingAverage([NotNull] this IEnumerable <float> collection, int length)
        {
            var average = new AverageValue(length);

            return(collection.Select(value => (float)average.AddValue(value)));
        }