Подогнать кривую к границе диаграммы рассеяния

Я пытаюсь подогнать кривую к границе диаграммы рассеяния.Смотрите это изображение для справки.

Я уже достиг соответствия с помощью следующего (упрощенного) кода. Он разбивает информационный кадр на маленькие вертикальные полосы, а затем находит минимальное значение в этих полосах ширины.width, игнорируяnans. (Функция монотонно убывает.)

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, Мой вопрос: есть ли более естественный или питонный способ сделать это - и есть ли способ повысить точность? (например, путем придания большего веса областям диаграммы рассеяния с более высокой плотностью точек?)

Ответы на вопрос(2)

Ваш ответ на вопрос