【问题标题】:gaussian filter on irregularly spaced (x,y) series?不规则间隔(x,y)系列的高斯滤波器?
【发布时间】:2017-07-02 16:07:23
【问题描述】:

在 python 中是否有一种简单的方法可以将高斯滤波器应用于一组点 (x,y),或者更具体地说是 (x,f(x)),这些点沿 x 轴不规则地间隔开?为了回应澄清我的意思的要求,也许更好的方式来描述我正在寻找的东西是“高斯加权平均值”,Fgwa(Xj),一系列点 (Xi,F(Xi)),其中对于提供的系列中的每个点 (Xi sub>,F(Xi)) 对所有提供的点进行总和,使得

Fgwa(Xj)    =    Σi [ e-[(Xj -Xi)/σ]^2 * F(Xi) ]    /    Σi [ exp- [(Xj-Xi)/σ]^2 ]

(注意 - 如果 (Xi,F(Xi)) 中的点恰好是均匀分布的,我相信上述定义的最终结果将与“scipy.ndimage.filters.gaussian_filter1d”所做的相同)。 有没有一种很好的、​​已经优化的、numpy 或 scipy 方法来做到这一点?

【问题讨论】:

  • 不清楚在这种情况下您所说的“高斯滤波器”是什么意思。您能否举例说明一些输入和预期输出,或者至少是对您感兴趣的操作的描述的参考?
  • 添加了澄清,对于原始问题的不明确表示抱歉。
  • 如果您有大量的观察结果,那么对数据进行分箱并使用等间距的方法(例如 savitzky-golay)比计算每个点的精确局部回归要快得多。

标签: python numpy scipy


【解决方案1】:

这看起来像Nadaraya-Watson Kernel Regression,一个可用的python实现在statsmodels package中。

您可以使用 pandas rolling window 进行类似的内核平滑操作。

【讨论】:

  • 谢谢。 Nadaraya-Watson answer + statsmodel 包看起来最有前途。据我所知,除非我遗漏了什么,否则您提到的 pandas 滚动窗口只是基于整数索引,并没有考虑提供的 x-index 中的任何实际不规则性。
  • Re: pandas + rolling 不是解决方案 - 试试:>>> ser = pandas.Series([0,0,0,0,0,0,1,1,1,1, 1,1,0,0,0,0,0,0], 索引=[0,1,2,3,4,5,106,107,108,109,110,111,112,113,114,115,116,117]); >>> print (ser.rolling(window=5, win_type='boxcar',center=True).mean()), 你得到 [NaN,NaN,0.0,0.0,0.2,0.4,0.6,0.8,1.0, 1.0,0.8,0.6,0.4,0.2,0.0,0.0,NaN,NaN]。无论如何,statsmodel 包 + Nadaraya-Watson 建议似乎很有希望,会尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 2013-03-29
  • 1970-01-01
  • 2012-04-26
  • 2018-01-26
  • 2013-02-01
  • 2014-10-02
相关资源
最近更新 更多