我有一组点(x,y)作为两个向量x,y,例如:
from pylab import *
x = sorted(random(30))
y = random(30)
plot(x,y, 'o-')
现在,我想使用高斯函数对数据进行平滑处理,并仅在x轴上的某些点(间隔规则)对其进行评估。
x_eval = linspace(0,1,11)
我得到的提示是这个方法被称为“高斯和过滤器”,但到目前为止我还没有在numpy/scipy中找到任何实现,尽管乍一看这似乎是一个标准问题。由于x值不是等间距的,我不能使用scipy.ndimage.gaussian_filter1d。
通常这种平滑是通过毛皮空间和核相乘来完成的,但我真的不知道这是否可能与不规则间隔的数据。
谢谢你的建议
3条答案
按热度按时间xzv2uavs1#
这对于非常大的数据集来说会很麻烦,但是您所要求的正确计算将按如下方式进行:
ctrmrzij2#
在回答之前,我会说这是一个DSP问题,而不是编程问题...
......话虽如此,您的问题有一个简单的两步解决方案。
步骤1:重新采样数据
因此,为了说明这一点,我们可以创建一个具有不等采样的随机数据集:
这给出了如下结果:
我们可以使用简单的线性插值对该数据进行重新采样:
这将我们的数据转换为:
步骤2:应用筛选器
在此阶段,您可以使用
scipy
提供的一些工具,将高斯滤波器应用于具有给定sigma值的数据:将其与原始数据进行对比:
sigma
值的选择决定了过滤器的宽度。w46czmvw3#
根据@Jaime的回答,我编写了一个函数,它通过一些附加文档实现了这一点,并能够丢弃远离数据点的估计值。
我认为置信区间可以通过自举法得到,但我还没有这样做。