Сглаживание кривой в Python

#python #python-3.x #smoothing

#python #python-3.x #сглаживание

Вопрос:

Я пытаюсь сформировать плавную кривую, используя точки данных (96 точек данных), используя следующий код. y=lol — это список, содержащий точки данных.

 import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import *

    x = np.arange(1,97,1)
    y = lol
    def smooth(y, box_pts):
        box = np.ones(box_pts)/box_pts
        y_smooth = np.convolve(y, box, mode='same')
        
        return y_smooth
    
    
    plt.rcParams["figure.figsize"] = (25,10)
    plot(x,y,'o')
    plot(x,smooth(y,12), 'r-', lw=2)
    #plot(x, smooth(y,19), 'g-', lw=2)
 

Однако на краях кривой значение кривой падает до очень низкого значения. Как мне решить эту проблему. Я получаю кривую, как показано ниже-

введите описание изображения здесь

Ответ №1:

Попробуйте использовать mode=»valid»:

 y_smooth = np.convolve(y, box, mode='valid')
 

Это устранит граничные эффекты, но форма вывода будет отличаться от длины ввода. См. Документ для получения дополнительной информации.

Комментарии:

1. Это выдает ошибку — x и y должны иметь одинаковое первое измерение, но иметь формы (96,) и (85,) Как мне указать форму в этом случае?

2. Просто постройте график значений y, постройте график (y,’o’) и постройте график (сглаживание (y,12), ‘r-‘, lw = 2)