Рубрики
Без рубрики

Расчет среднего итеративно

Недавно я столкнулся с ситуацией, когда я хотел рассчитать среднее значение неизвестного размера. Мой первый… Tagged с алгоритмами, Python.

Недавно я столкнулся с ситуацией, когда я хотел рассчитать среднее значение неизвестного размера. Моя первая наивная идея состояла в том, чтобы вычислить среднее значение между средним значением текущего и новым значением:

xs = [3, 7, 6] # Assuming we don't know the length

mean = x[0]
n = 1
while n < len(xs):
  mean = (mean + xs[n])/2
  n += 1

Что быстро показывает, что это просто неправильно:

(3 + 7 + 6)/3 = 5.3333
((5/2 + 7/2)/2 + 6/2) = 5.5

Чтобы найти фактическое соотношение между средним значением текущего и значением, я начал сравнивать среднее значение из 2 и среднее из 3 значений:

(3 + 7)/2 = 3/2 + 7/2
(3 + 7 + 6)/3 = (3 + 7)/3 + 6/3

Отсюда можно переписать среднее значение из 3 значений с точки зрения среднего из 2 значений:

(3 + 7)/3 + 6/3 = 
= (3 + 7)/2 * 2/3 + 6/3 =
= (3/2 + 7/2)*2/3 + 6/3

Где я заметил шаблон:

mean(i) = mean(i-1) * (i-1)/i + x(i-1)/i

Что дает нам правильный алгоритм для итеративного расчета среднего:

xs = [3, 7, 6] # Assuming we don't know length

mean = xs[0]
n = 1
while n < len(xs):
  n += 1
  mean = mean*(i-1)/i + xs[i-1]/i

Хотя я знаю, что в этом примере итеративное расчет является неумелым, я обнаружил, что это реальная удобная для реализации алгоритма выращивания сегмента, где я решаю, какие пиксели добавить к сегменту на основе среднего значения текущего сегмента.

Оригинал: “https://dev.to/cipharius/calculating-mean-iteratively-3aah”