Я пытался усвоить средние колебательные данные.Колебания неоднородны, в начальных областях меньше колебаний.
x = np.linspace(0, 1000, 1000001)
y = some oscillating data say, sin(x^2)
(Исходный файл данных огромен, поэтому я не могу его загрузить)
Я хочу взять взвешенную скользящую среднюю функцию и построить ее.Первоначально период функции больше, поэтому я хочу использовать среднее значение за большой промежуток времени.Хотя я могу сделать с меньшим интервалом времени последнего.
Я нашел возможное элегантное решение в следующем посте:
Взвешенное скользящее среднее в python
Однако я хочу иметь различную ширину в разныхобласти х.Скажем, когда x между (0,100), я хочу, чтобы ширина = 0,6, а когда x между (101, 300), ширина = 0,2 и т. Д.
Это то, что я пытался реализовать (с моим ограниченнымзнания в программировании!)
def weighted_moving_average(x,y,step_size=0.05):#change the width to control average
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))
#We're going to weight with a Gaussian function
def gaussian(x,amp=1,mean=0,sigma=1):
return amp*np.exp(-(x-mean)**2/(2*sigma**2))
if x.any() < 100:
for index in range(0,len(bin_centers)):
bin_center = bin_centers[index]
weights = gaussian(x,mean=bin_center,sigma=0.6)
bin_avg[index] = np.average(y,weights=weights)
else:
for index in range(0,len(bin_centers)):
bin_center = bin_centers[index]
weights = gaussian(x,mean=bin_center,sigma=0.1)
bin_avg[index] = np.average(y,weights=weights)
return (bin_centers,bin_avg)
Нет необходимости говорить, что это не работает!Я получаю сюжет с первым значением сигмы.Пожалуйста, помогите ...