Numpy的用法很广,高级功能包括多项式求解以及多项式拟合的功能。今天就来理一理。
import numpy as np
p=np.poly1d([1,-4,3]) # 二阶多项式的系数
print('x=0多项式的值是',p(0))
print('p的根',p.roots)
p=np.poly1d([1,-4,3]) 相当于数学里的p=x²-4x+3。
numpy 提供的 np.polyfit()函 数可 以用 多项式对数据进行拟合。在下面例子中,我们生成 30个在平方根曲线周围引入随机噪声的点,用一个三阶多项式来拟合这些点。
import matplotlib.pyplot as plt
import numpy as np
dots=30
order=3
x=np.linspace(0,1,dots)
y=np.sqrt(x)+0.2*np.random.rand(dots)
p=np.poly1d(np.polyfit(x,y,order))
t=np.linspace(0,1,200)
plt.plot(x,y,'ro',t,p(t))
拟合双月
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
# 准备数据
X,y=make_moons(n_samples=1000,noise=0.2) # 添加噪声0.2
X1=X[y==0]
X2=X[y==1]
# 图一
plt.figure(figsize=(8,8))
plt.scatter(X1[:,0],X1[:,1],c='b',s=12)
plt.scatter(X2[:,0],X2[:,1],c='r',s=12)
# 图二
plt.figure(figsize=(8,8))
t1=np.polyfit(X1[:,0],X1[:,1],deg=3)
p1=np.poly1d(t1)
x1=np.linspace(X1[:,0].min(),X1[:,0].max(),100)
pp1=p1(x1)
plt.scatter(X1[:,0],X1[:,1],color='b',s=12)
plt.plot(x1,pp1,color='r')
# 图三
plt.figure(figsize=(8,8))
t2=np.polyfit(X2[:,0],X2[:,1],deg=3)
p2=np.poly1d(t2)
x2=np.linspace(X2[:,0].min(),X2[:,0].max(),100)
pp2=p2(x2)
plt.scatter(X2[:,0],X2[:,1],color='r',s=12)
plt.plot(x2,pp2,color='b')
图一
图二
图三
重要代码
t1 = np.polyfit(X1[:,0],X1[:,1],deg=3) np.polyfit制定拟合函数deg多项式项数
p1=np.poly1d(t1) np.poly1d拟合
x1=np.linspace(X1[:,0].min(),X1[:,0].max(),100)
pp1=p1(x1)
plt.plot(x1,pp1,color=‘r’)