如何获得加权高斯滤波器

Gab*_*iel 4 python numpy gaussian scipy

我有一组加权 x,y点,如下所示(全套在这里):

#  x       y     w
-0.038  2.0127  0.71
0.058   1.9557  1
0.067   2.0016  0.9
0.072   2.0316  0.83
...
Run Code Online (Sandbox Code Playgroud)

我需要找到一个平滑的线,根据分配给每个点的重要性来调整这些点,即:更多的权重意味着数据点应该具有更多的相关性.

这是我到目前为止的代码,基本上将gaussian_filter1d应用于数据(我从这个问题得到了想法:python中的行平滑算法?):

import matplotlib.pyplot as plt
import numpy as np
from scipy.ndimage import gaussian_filter1d

# Read data from file.
data = np.loadtxt('data_file', unpack=True)
x, y, w = data[0], data[1], data[2]

# Return evenly spaced numbers over a specified interval.
t = np.linspace(0, 1, len(x))
t2 = np.linspace(0, 1, 100)    
# One-dimensional linear interpolation.
x2 = np.interp(t2, t, x)
y2 = np.interp(t2, t, y)

# Obtain Gaussian filter with fixed sigma value.
sigma = 7
x3 = gaussian_filter1d(x2, sigma)
y3 = gaussian_filter1d(y2, sigma)

# Make plot.
cm = plt.cm.get_cmap('RdYlBu')
plt.scatter(x, y, marker="o", c=w, s=40, cmap=cm, lw=0.5, vmin=0, vmax=1)
plt.plot(x3, y3, "r", lw=2)
plt.show()
Run Code Online (Sandbox Code Playgroud)

此代码生成以下图表(较蓝点具有较高的权重值):

情节

问题是这种拟合不考虑分配给每个点权重.如何将这些信息引入高斯滤波器?

Dev*_*per 5

请注意,以下想法是解决方法而不是一个确切的解决方案,但值得尝试.

我们的想法是用w重量参数重复对应值xy.所以,如果你扩展w到例如范围[1,10]在所有相应的值x,并因此y将被复制10次,w等于10.也就是说,新的x,y将被创建.通过这种方式,我们结合了重量价值观的频率xy,确实如此.完成这项工作后,将新的算法提供给您的算法有望为您提供所需的结果,如下面的工作示例所示.

  • 对于第一个图,蓝色到红色光谱对应于从低到高的权重.标题数是如上所述的重复因素.
  • 对于第二个数字,您的数据,我们没有触及您的颜色格式.

在此输入图像描述

在此输入图像描述