Я использую numpy и использую метод скользящего окна, к сожалению, он не работает, как сказал мне профессор в одной кривой. точки данных увеличиваются, а с другой стороны, точки данных уменьшаются. Мой пример кода:
Код: Выделить всё
def find_linear_part(d, f, window_size=120, min_slope=0.01):
slope = 0
intercept = 0
fit = 0
min_residual = float('inf')
for i in range(len(d) - window_size + 1):
d_window = d[i:i + window_size]
f_window = f[i:i + window_size]
slope, intercept = np.polyfit(d_window, f_window, 1)
y_fit = slope * d_window + intercept
residual = np.sum((f_window - y_fit) ** 2)
if residual < min_residual:
min_residual = residual
fit = (d_window, f_window)
new_slope = slope
new_intercept = intercept
return fit, new_slope, new_intercept
И это изображения ожидаемых графиков например.


Подробнее здесь: https://stackoverflow.com/questions/787 ... -any-curve