So erhalten Sie einen gewichteten Gauß-Filter

Ich habe eine Reihe vongewichtet x,y Punkte, wie unten gezeigt (der vollständige Satz istHier):

#  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
...

Ich muss eine geglättete Linie finden, die diese Punkte entsprechend der ihnen zugewiesenen Wichtigkeit anpasst, dh: Mehr Gewicht bedeutet, dass der Datenpunkt relevanter sein sollte.

Dies ist der Code, den ich bisher habe, der im Grunde genommen a giltgaussian_filter1d zu den Daten (ich kam auf die Idee aus dieser Frage:Linienglättungsalgorithmus in 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()

Dieser Code erzeugt das folgende Diagramm (blauere Punkte haben einen höheren Gewichtungswert):

Das Problem ist, dass diese Passform das nicht berücksichtigtjedem Punkt zugeordnete Gewichte. Wie kann ich diese Informationen in den Gauß-Filter einfügen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage