Как я могу рассчитать среднее и стандартное отклонение потока строк в Perl?
В наших журнальных файлах мы сохраняем время отклика для запросов. Каков наиболее эффективный способ расчета медианного времени ответа, "75/90/95% запросов были поданы менее чем за N раз" и т.д.? (Я предполагаю, что вариант моего вопроса: какой лучший способ вычислить среднее и стандартное отклонение пучка потоков чисел).
Лучшее, что я придумал, было просто читать все цифры, заказывать их, а затем выбирать номера, но это кажется действительно тупой. Разве нет более разумного пути?
Мы используем Perl, но могут быть полезны решения для любого языка.
Ответы
Ответ 1
См. статью Вычисление Percentiles в приложениях, привязанных к памяти. В нем объясняется, как эффективно вычислять медианные и другие процентили.
Кроме того, здесь вы найдете статью о вычислении стандартного отклонения (отклонения): Точность вычисления отклонения.
Ответ 2
вы можете посмотреть быстрый выбор:
http://en.wikipedia.org/wiki/Selection_algorithm
Или при алгоритме Вирта:
http://www.mail-archive.com/[email protected]/msg20059.html
Показатель для медианы можно найти здесь:
http://ndevilla.free.fr/median/median/index.html
Ответ 3
Посмотрите PDL... язык данных Perl.
Также см. предыдущие SO-вопросы о средстве /std dev:
/I3az/
Ответ 4
Здесь приведены примеры кода: http://rosettacode.org/wiki/Standard_Deviation