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')