最近在学习python数据分析,做个笔记记录一下代码,今天是用numpy拟合了一组数据。
先贴拟合的效果出来,蓝色的点是用np生成的20个点,红线是拟合出来的曲线:
下面是代码:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(300,400,20)
y = x + np.random.random_integers(5,20,20) #随机取5到10中间20个数
poly = np.polyfit(x,y,deg=1)
z = np.polyval(poly, x)
plt.plot(x, y, 'o')
plt.plot(x, z)
plt.show()
代码可以分成三部分: 第一部分是生成数据,x是在300到400中间平分的取了20个点(包含300,400)生成一个数组;至于y是在x的每个元素上加了一个5-20之间的随机数的数组。相当于获得了20个点的坐标。第二部分是用polyfit函数,对x,y进行拟合(下面会介绍这个函数);拟合出的曲线对应的z值用polyval获得。第三部分就是绘图了。
下面详细介绍以下polyfit函数的参数以及返回值:这个函数前两个参数是x,y 也就是我们生成的两个20维的数组,代表要拟合的20个点。第三个参数加上1是你要拟合的多项式的项数。比如你选择这个参数为1,即你想拟合一个有两项的多项式,y=kx**1+bx**0,也就是一条直线,如果你选择参数为2,就是拟合右边有三项的多项式:y=Lx**2+kx**1+bx**0,也就是一条抛物线。具体看下模块中的函数说明。
def polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False):
"""
Least squares polynomial fit.
Fit a polynomial ``p(x) = p[0] * x**deg + ... + p[deg]`` of degree `deg`
to points `(x, y)`. Returns a vector of coefficients `p` that minimises
the squared error.
至于polyfit的返回值,可以打印一下上面代码中的poly看一下,是[k,b](如果你制定deg参数为2的话即返回抛物线的参数[L,k,b])。先写到这,后面会持续更新记录~~来源:CSDN
作者:fcfans
链接:https://blog.csdn.net/sinat_37255539/article/details/78998726