【问题标题】:Stream Processing with Statistical Functions具有统计功能的流处理
【发布时间】:2011-10-16 16:11:43
【问题描述】:

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

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

我已经使用缓冲区对此进行了编码,但我在想 - 我基本上正在构建的是一个固定功能管道......这必须在.net中完成......

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

谢谢

【问题讨论】:

    标签: c# .net statistics inputstream


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      响应式扩展库可能对您尝试做的事情有所帮助,因为它提供了一种在异步数据流上使用 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

      【讨论】:

      • 谢谢 Matthew - 我看过了,这确实为我处理了我的流。我的数据集以 100Hz 的速率到达,并且每 200 个样本运行一次完整的计算,RX 是否会产生任何重大开销?我以前使用简单的环形缓冲区(固定长度队列),性能非常快 - 考虑到 RX 将原始数据项包装在“可观察对象”中,是否有任何性能影响?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-28
      • 2019-05-09
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多