30 lines
913 B
Python
30 lines
913 B
Python
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
#first generate some datapoint for a randomly sampled noisy sinewave
|
|
x = np.random.random(1000)*10
|
|
noise = np.random.normal(scale=0.3,size=len(x))
|
|
y = np.sin(x) + noise
|
|
|
|
#plot the data
|
|
plt.plot(x,y,'ro',alpha=0.3,ms=4,label='data')
|
|
plt.xlabel('Time')
|
|
plt.ylabel('Intensity')
|
|
|
|
#define a moving average function
|
|
def moving_average(x,y,step_size=.1,bin_size=1):
|
|
bin_centers = np.arange(np.min(x),np.max(x)-0.5*step_size,step_size)+0.5*step_size
|
|
bin_avg = np.zeros(len(bin_centers))
|
|
|
|
for index in range(0,len(bin_centers)):
|
|
bin_center = bin_centers[index]
|
|
items_in_bin = y[(x>(bin_center-bin_size*0.5) ) & (x<(bin_center+bin_size*0.5))]
|
|
bin_avg[index] = np.mean(items_in_bin)
|
|
|
|
return bin_centers,bin_avg
|
|
|
|
#plot the moving average
|
|
bins, average = moving_average(x,y)
|
|
plt.plot(bins, average,label='moving average')
|
|
|
|
plt.show() |