В настоящее время я использую алгоритм онлайн-дисперсии для вычисления дисперсии для данной последовательности. Это хорошо работает, а также обеспечивает хорошую численную стабильность и сопротивление переполнению за счет некоторой скорости, что прекрасно. Мой вопрос заключается в том, существует ли алгоритм, который будет быстрее этого, если среднее значение выборки уже известно, имея аналогичную стабильность и устойчивость к переполнению (отсюда не что-то вроде вычисления наивных дисперсий).Расчет отклонения от данного значения
Текущий расчет онлайн-дисперсии - это однопроходный алгоритм с двумя делениями и умножениями в основном цикле (что и влияет на скорость). Из википедии:
def online_variance(data):
n = 0
mean = 0
M2 = 0
for x in data:
n = n + 1
delta = x - mean
mean = mean + delta/n
M2 = M2 + delta*(x - mean)
variance = M2/(n - 1)
return variance
Мы не можем сказать, что алгоритм быстрее другого, не зная другого ... – Floris