2017-07-02 38 views
0

有在python一种简单的方法高斯滤波器应用到一组点(X,Y),或更具体的是不经常沿着x轴线间隔(X,F(X))?在回答关于我的意思澄清要求,也许有更好的方式来形容我正在寻找的是一个“高斯加权平均”,F GWA(X Ĵ),一系列点的(X ,F(X ))其中用于所提供的序列中的每个点(X ,F(X ))之和基本上被在所有的设置点以使得不规则间隔(x,y)序列上的高斯滤波器?

F gwa(X j)        =         Σ 并[e - [(X Ĵ -X )/ σ]^2 * F(X )]        /        Σ i [exp - [(X j -X i)/ σ]^2]

(注意 - 如果在(X点,F(X ))碰巧被均匀地间隔开,相信的是,上述定义的最终结果会和“scipy.ndimage.filters.gaussian_filter1d”一样)。 有没有一个很好的,已经优化,numpy或scipy的方式来做到这一点?

+1

您在这方面“高斯滤波”的意思是现在还不清楚。你能否给出一些输入和预期输出的例子,或者至少参考一下你有兴趣做的操作的描述? – jakevdp

+0

增加了澄清,对原始问题的不明显感到遗憾。 – mtopinka

+1

如果您有大量的观测数据,那么对数据进行分箱并使用等间隔方法(例如,savitzky-golay)比计算每个点的精确局部回归快得多。 – user333700

回答

1

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

你可以做熊猫rolling window类似的内核平滑操作。

+0

谢谢。 Nadaraya-Watson答案+ statsmodel包看起来最有前途。据我所知,除非我错过了一些东西,你提到的熊猫滚动窗口事物只是基于整数索引,并且没有考虑到提供的x-索引中的任何实际不规则性。 – mtopinka

+0

回复:熊猫+滚动不是一个解决方案 - 尝试:>>> 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]); >>>打印(ser.rolling(窗口= 5,win_type = '篷车',中心= 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的建议似乎很有希望,会尝试。 – mtopinka