view tvii/average.py @ 61:0e6743d5416d

notes on averaging
author Jeff Hammel <k0scist@gmail.com>
date Sun, 10 Dec 2017 18:18:32 -0800
parents
children
line wrap: on
line source

"""
exponentially weighted averages

v[0] = theta[0]
v[t] = beta*v[t-1] + (1-beta)*theta[t]

=>
v[t] as approximately averaged over 1/(1-beta) counts

Bias correction:
v[t] / (1 - beta**t)
"""

def exponential_weighted_average(theta, beta=0.9):
    """a form of moving window"""
    # TODO: consider a generator; there isn't much state here
    # v = theta[0]
    # v = beta*v (1-beta)*theta[1]
    retval = [theta[0]]
    for value in theta[1:]:
        retval.append(beta*retval[-1] + (1.-beta)*value)
    return retval