【问题标题】:Gaussian rolling weights pandas高斯滚动重量熊猫
【发布时间】:2020-10-15 08:54:40
【问题描述】:

假设我有一个pandas 系列数据

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)

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

.rolling() 可以做到这一点吗?

【问题讨论】:

  • 对每个元素进行加权后,pandas Series/DataFrame 滚动方法需要一个聚合函数。您在寻找加权总和/平均值吗?
  • 我猜mean 可以工作耶

标签: pandas numpy signal-processing


【解决方案1】:

您可以使用numpy.average 取加权平均值:

import numpy as np
import pandas as pd

n = 1000
window_size = 100

srs = pd.Series(np.random.random(n))

mu = 60
sigma = 0.2
x = np.arange(window_size)
weights = np.exp(-(x-mu)**2 / 2*sigma**2) / np.sqrt(2*np.pi*sigma**2)

srs.rolling(window).apply(lambda wndw: np.average(wndw, weights=weights))

这与:

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

请注意,如果您尝试传递小于windowmin_periods,这将中断,因为np.average 要求aweights 具有相同的长度。

【讨论】:

  • 我相信权重是倒置的
  • 也许只是变量命名的选择不当!您的体重称为y,我称为w 的临时变量表​​示您正在考虑的窗口。我将重命名并澄清它。
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2018-06-26
  • 2017-03-30
  • 2019-04-11
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多