python 移动平均值_加权移动平均值在python

我以基本上随机的间隔采样数据.我想使用numpy(或其他

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_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()

输出:

使用crs17的建议在np.average函数中使用“weights =”,我得出了加权平均函数,它使用高斯函数来加权数据:

def weighted_moving_average(x,y,step_size=0.05,width=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))

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

for index in range(0,len(bin_centers)):

bin_center = bin_centers[index]

weights = gaussian(x,mean=bin_center,sigma=width)

bin_avg[index] = np.average(y,weights=weights)

return (bin_centers,bin_avg)

结果看起来不错:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值