Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- namespace yield
- {
- public class Averager
- {
- DataPoint point;
- Queue<double> queue;
- double sum;
- int windowWidth;
- public Averager(DataPoint point, int windowWidth)
- {
- this.windowWidth = windowWidth;
- this.point = point;
- queue = new Queue<double>();
- }
- public double Measure()
- {
- var value = point.OriginalY;
- queue.Enqueue(value);
- sum += value;
- if (queue.Count > windowWidth)
- sum -= queue.Dequeue();
- return sum / queue.Count;
- }
- }
- public static class MovingAverageTask
- {
- public static IEnumerable<DataPoint> MovingAverage(this IEnumerable<DataPoint> data, int windowWidth)
- {
- var counter = data.GetEnumerator();
- var t = 0;
- while (counter.MoveNext())
- {
- var point = counter.Current;
- if (t > 0) // здесь всё плохо. Как мне получить значение новое у точки?
- {
- var averager = new Averager(point, windowWidth);
- point.OriginalY = point.AvgSmoothedY;
- }
- else // а тут вроде норм
- {
- point.AvgSmoothedY = point.OriginalY;
- t++;
- }
- yield return point;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement