Pandas 高斯滚动加权

Pandas 高斯滚动加权,pandas,numpy,signal-processing,Pandas,Numpy,Signal Processing,假设我有一系列数据 import numpy as np import pandas as pd import matplotlib.pyplot as plt n = 1000 srs = pd.Series(np.random.random(n)) 现在,我希望通过该数据滚动高斯滤波器,使权重如下所示: window = 100 x = np.arange(window) mu = 60 sigma = 0.2 y = np.exp(-(x-mu)**2 / 2*sigma**2)

假设我有一系列数据

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n = 1000
srs = pd.Series(np.random.random(n))
现在,我希望通过该数据滚动高斯滤波器,使权重如下所示:

window = 100

x = np.arange(window)

mu = 60
sigma = 0.2

y = np.exp(-(x-mu)**2 / 2*sigma**2) / np.sqrt(2*np.pi*sigma**2)

plt.plot(x,y)

也就是说,对于长度
100
的每个
窗口
,第60个条目具有最大权重,其他条目按照高斯公式衰减

使用
.rolling()

可用于获取加权平均值:

将numpy导入为np
作为pd进口熊猫
n=1000
窗口大小=100
srs=pd系列(np.随机。随机(n))
μ=60
西格玛=0.2
x=np.arange(窗口大小)
权重=np.exp(-(x-mu)**2/2*西格玛**2)/np.sqrt(2*np.pi*西格玛**2)
srs.滚动(窗口).应用(λwndw:np.平均值(wndw,重量=重量))
这与:

srs.rolling(window).apply(lambda wndw:(wndw*weights.sum()/weights.sum())

请注意,如果您试图传递小于
窗口的
min\u时段
,则此操作将中断,因为
np。平均值
要求
a
权重
具有相同的长度。

一旦对每个元素进行权重计算,pandas Series/DataFrame滚动方法需要一个聚合函数。你在寻找加权和/平均值吗?我想
平均值
是可行的。我相信权重是相反的,可能只是变量命名的一个糟糕选择!您的权重称为
y
,我称为
w
的温度变量表示您正在考虑的窗口。我将给它重新命名并加以澄清。