jmquintana79
5/8/2017 - 6:28 AM

moving average for 1d smoothing

Moving Average: Simple and Modified

## calculate Simple Moving Average
def simple_moving_avg(w,nprev):
    import numpy as np
    import copy
    # assign
    wp = copy.deepcopy(w)
    # calculate simple moving average
    n = len(wp)
    for i in range(nprev,n):
        signal = wp[i-nprev:i+1]
        if len(signal[~np.isnan(signal)])>0: w[i] = np.mean(signal[~np.isnan(signal)])
        else: w[i] = np.nan
    # return
    return w



## calculate Modified Moving Average
def modified_moving_avg(w,nprev):
    import numpy as np
    # calculate simple moving average
    n = len(w)
    for i in range(nprev,n):
        signal = w[i-nprev:i+1]
        if len(signal[~np.isnan(signal)])>0: w[i] = np.mean(signal[~np.isnan(signal)])
    # return
    return w




## Moving Avg Smoother
def smooth_moving_average(v:np.array, windows_size:int)->np.array:
    """ 
    Moving average smoother.
    v -- Signal data to be smoothed.
    windows_size -- Windows size to be used by the smoother.
    return -- Smoothed signal.
    """
    # build windows to be moving
    box = np.ones(windows_size)/windows_size
    # calculate and store y same df
    return np.convolve(v, box, mode='same')