使用统计函数进行流处理

时间:2011-07-30 20:08:20

标签: c# .net statistics inputstream

我正在编写一个解释时间延迟数据流的应用程序。数据以一致的间隔到达,每个数据包由3个原始值组成。

我需要处理此流以在每次新数据包到达时计算一个值。 计算包括需要包括“回溯”值,因此它可能仅在给定数量的分组到达之后产生输出值。 我应用于缓冲数据的函数类型包括SD,MEAN(OVER RANGE),MAX / MIN等,所有基本统计函数。

我使用缓冲区对此进行了编码,但我在想 - 我基本上构建的是一个固定的函数管道......这必须在.net之前完成...

是否有一些库可以用来“流利地”(最好)构建我的函数管道,然后简单地将数据包泵入其中,然后读出生成的各种结果?

谢谢

2 个答案:

答案 0 :(得分:2)

听起来Reactive Extensions(Rx)可能正是您所寻找的。 Rx允许您将Linq(即“流畅的”API)应用于数据流。如果您希望计算最近100个观测值(您称之为“回溯”值)的窗口上的运行平均值,它还允许您定义缓冲区的长度。

Channel9上有几个videos可以帮助您入门。 This one显示了如何根据“回顾”值进行计算。

答案 1 :(得分:1)

Reactive Extensions库可能对您尝试执行的操作有所帮助,因为它提供了一种在异步数据流上使用Linq运算符的方法。您可以使用Buffer运算符仅在指定数量的项到达后返回值,即:

var seq = Observable.Interval(TimeSpan.FromSeconds(1));
var bufSeq = seq.Buffer(5);
bufSeq.Subscribe(values => Console.WriteLine(values.Sum()));
Console.ReadKey();

Reactive网站上有更多示例和信息:

Reactive Extensions