def online_mean_and_variance(data):
n, mu, s2 = 0, 0, 0
for x in data:
n += 1
delta = x - mu
mu += delta/n
s2 += delta*(x - mu)
if n > 1:
yield (mu, s2/(n-1))
Unlike the standard two-pass algorithm, this one is online; it also happens to be more stable. If that's not enough, I've given it to you here as a Python generator. Enjoy!
No comments:
Post a Comment