Алгоритм подбора кривой из Klipfolio в python - PullRequest
1 голос
/ 30 мая 2019

Я ищу способ применения такого алгоритма для подгонки кривой, чтобы линия не превышала значений, из которых она была приспособлена

Ниже приведен код Python с примерами значений, если вы скопируете / вставите его и запустите, вы увидите, что строка справа находится над точками

from scipy import interpolate
from numpy import linspace

y = [5, 0, 4, 4]
x = linspace(0, len(y)-1, num=len(y), endpoint=True)
f2 = interp1d(x, y, kind='cubic')
xnew = linspace(0, len(y)-1, num=100, endpoint=True)

plt.plot(xnew, f2(xnew), '--');
plt.scatter(x=[i for i in range(len(x))],y=y, color='red');

1 Ответ

1 голос
/ 30 мая 2019

Вот пример, основанный на вашем коде, сравнивающем линейные, квадратичные и кубические интерполяции.Только линейная интерполяция не выше правой точки данных.Единственный общий метод, который я знаю для этой цели, кроме линейной интерполяции, - это отсечение, которое я лично считаю плохой практикой.

plot

from scipy import interpolate
from numpy import linspace
import matplotlib
import matplotlib.pyplot as plt

y = [5, 0, 4, 4]
x = linspace(0, len(y)-1, num=len(y), endpoint=True)
f1 = interpolate.interp1d(x, y, kind='linear')
f2 = interpolate.interp1d(x, y, kind='quadratic')
f3 = interpolate.interp1d(x, y, kind='cubic')
xnew = linspace(0, len(y)-1, num=100, endpoint=True)

plt.title('Interpolation comparison')
plt.plot(xnew, f1(xnew), linestyle='solid', color='red', label='linear');
plt.plot(xnew, f2(xnew), linestyle='dashed', color='green', label='quadratic');
plt.plot(xnew, f3(xnew), linestyle='dashdot', color='blue', label='cubic');
plt.scatter(x=[i for i in range(len(x))],y=y, color='black');
plt.legend() # turn on the legend
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...