使用 scipy 拟合数据
Fit data with scipy
我有两个数据集,由不同的方程计算得出,现在我想将两个数据集拟合到同一条趋势线,或者将一个数据集拟合到另一个数据集。我想用橙色数据集约束蓝色数据集并获得红色趋势线,我想知道我是否可以使用 SciPy(scipy.optimize.leastsq
或 scipy.optimize.curve_fit
),但我没有知道怎么做,我不明白指令,因为他们要求一个函数作为输入,而这正是我想要的,函数,我有点(x,y)。
您可以使用 numpy.polynomial.polynomial
通过使用 least-squares 方法将 second-degree 多项式拟合到您的数据来执行此操作。
import numpy as np
import numpy.polynomial.polynomial as poly
import matplotlib.pyplot as plt
x = [1, 2, 3] # --> assuming your x-data
y = [0.1, 1, 10] # --> assuming your y-data
coefs = poly.polyfit(x, y, 2)
ffit = poly.Polynomial(coefs)
x_new = np.linspace(1, 3, 10) # --> more data points for a smooth curve
plt.plot(x, y, label="Data")
plt.plot(x_new, ffit(x_new), label="Fit")
plt.legend()
plt.show()
只需将 x
、y
和 x_new
替换为您想要的值即可。
我有两个数据集,由不同的方程计算得出,现在我想将两个数据集拟合到同一条趋势线,或者将一个数据集拟合到另一个数据集。我想用橙色数据集约束蓝色数据集并获得红色趋势线,我想知道我是否可以使用 SciPy(scipy.optimize.leastsq
或 scipy.optimize.curve_fit
),但我没有知道怎么做,我不明白指令,因为他们要求一个函数作为输入,而这正是我想要的,函数,我有点(x,y)。
您可以使用 numpy.polynomial.polynomial
通过使用 least-squares 方法将 second-degree 多项式拟合到您的数据来执行此操作。
import numpy as np
import numpy.polynomial.polynomial as poly
import matplotlib.pyplot as plt
x = [1, 2, 3] # --> assuming your x-data
y = [0.1, 1, 10] # --> assuming your y-data
coefs = poly.polyfit(x, y, 2)
ffit = poly.Polynomial(coefs)
x_new = np.linspace(1, 3, 10) # --> more data points for a smooth curve
plt.plot(x, y, label="Data")
plt.plot(x_new, ffit(x_new), label="Fit")
plt.legend()
plt.show()
只需将 x
、y
和 x_new
替换为您想要的值即可。