Как подгонять данные и затем выбирать из подобранной функции для построения кривой

Учитывая два массива x и y, я пытался использовать функцию np.polyfit для подгонки данных, используя следующий способ:

z = np.polyfit(x, y, 20)
f = np.poly1d(z)

но так как я хочу построить линейную диаграмму вместо гладкой кривой, то я использую эту функцию f для выборки массива для построения линии.

x_new = np.linspace(x[0], x[-1], fitting_size)
y_new = np.zeros(fitting_size)
for t in range(fitting_size):
   y_new[t] = f(x_new[t])

plt.plot(x_new, y_new, marker='v', ms=1)

Проблема в том, что приведенный выше фрагмент кода дает мне плавную кривую. Как я могу это исправить? Благодарю.

1 ответ

К сожалению, смысл вопроса немного неясен. Однако, если вы хотите выполнить линейную подгонку, вам необходимо предоставить степень deg=1 в polyfit, Тогда нет никаких причин для выборки из подгонки; можно просто использовать один и тот же входной массив и применить к нему функцию подгонки.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1,5,20)
y = 3*x**2+np.random.rand(len(x))*10

z = np.polyfit(x, y, 1)
f = np.poly1d(z)

z2 = np.polyfit(x, y, 2)
f2 = np.poly1d(z2)


plt.plot(x,y, marker=".", ls="", c="k", label="data")
plt.plot(x, f(x), label="linear fit")
plt.plot(x, f2(x), label="quadratic fit")
plt.legend()
plt.show()

Другие вопросы по тегам