Потоковая обработка со статистическими функциями - PullRequest
0 голосов
/ 31 июля 2011

Я пишу приложение, которое интерпретирует поток данных с задержкой по времени. Данные поступают с постоянными интервалами, и каждый пакет данных состоит из 3 простых значений.

Мне нужно обработать этот поток для вычисления значения каждый раз, когда приходит новый пакет. Вычисление включает в себя необходимость включения значений «обратного просмотра», следовательно, оно может выдавать выходное значение только после получения заданного количества пакетов. Типы функций, которые я применяю к буферизованным данным, включают SD, MEAN (OVER RANGE), MAX / MIN и т. Д., Все основные статистические функции.

Я кодировал это, используя буферы, но я думаю - то, что я в основном строю, это конвейер с фиксированными функциями ... это должно было быть сделано раньше в .net ...

Есть ли какая-нибудь библиотека, которую я могу использовать, чтобы «свободно» (предпочтительно) построить свой конвейер функций, а затем просто закачать в него пакеты и прочитать различные сгенерированные результаты?

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 июля 2011

Звучит как Reactive Extensions (Rx) может быть тем, что вы ищете.Rx позволяет применять Linq (т. Е. «Свободный» API) к потоку данных.Это также позволяет вам определять длину вашего буфера, если вы, например, хотите вычислить скользящее среднее по окну последних 100 наблюдений (то, что вы называете «значениями обратного просмотра»).

На канале 9 есть пара видео , с которых можно начать. Этот показывает, как выполнять расчеты на основе значений «оглядки».

1 голос
/ 31 июля 2011

Библиотека Reactive Extensions может быть полезна для того, что вы пытаетесь сделать, поскольку она предоставляет способ использования операторов Linq над асинхронными потоками данных.Вы можете использовать оператор буфера, чтобы возвращать значение только после того, как поступило указанное количество элементов, например:

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

На сайте Reactive есть больше примеров и информации:

Реактивные расширения

...