Подогнать кривую к границе диаграммы рассеяния
Я пытаюсь подогнать кривую к границе диаграммы рассеяния.Смотрите это изображение для справки.
Я уже достиг соответствия с помощью следующего (упрощенного) кода. Он разбивает информационный кадр на маленькие вертикальные полосы, а затем находит минимальное значение в этих полосах ширины.width
, игнорируяnan
s. (Функция монотонно убывает.)
def func(val):
""" returns some function of 'val'"""
return val * 2
for i in range(0, max_val, width)):
_df = df[(df.val > i) & (df.val < i + width)] # vertical slice
if np.isnan(np.min(func(_df.val)): # ignore nans
continue
xs.append(i + width)
ys.append(np.min(func(_df.val)))
Я тогда делаю подгонку сscipy.optimize.curve_fit
, Мой вопрос: есть ли более естественный или питонный способ сделать это - и есть ли способ повысить точность? (например, путем придания большего веса областям диаграммы рассеяния с более высокой плотностью точек?)