一、np.linalg.lstsq是什么
np.linalg.lstsq是NumPy中的线性代数函数,它被用于解决矩阵方程,可在最小二乘意义上重建一组观察数据。
具体来说,np.linalg.lstsq的作用是,求解一个形如Ax = b的线性系统,其中A为一个m×n的线性矩阵,b为一个包含m个独立变量的向量,x为一个包含n个未知变量的向量,通过求解x的值,满足方程组。同时,如果方程组没有精确的解,它可以通过最小二乘调整返回最优解。
二、np.linalg.lstsq的输入和输出
输入:
numpy.linalg.lstsq(a, b, rcond='warn')
输出为4个值:
x: 系数向量 residuals: 残差 rank: 矩阵A的秩 s: 奇异值
三、示例
1、求解线性方程组
通过一个简单的例子来说明如何使用np.linalg.lstsq函数求解线性方程组。
import numpy as np # 创建4x3的系数矩阵A和4x1的矩阵b A = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 10], [13, 14, 15]]) b = np.array([[1], [2], [3], [4]]) # 求解方程组 x, residuals, rank, s = np.linalg.lstsq(A, b, rcond=None) print("系数向量为:\n", x) print("残差为:\n", residuals) print("矩阵A的秩为:\n", rank) print("奇异值为:\n", s)
运行结果如下:
系数向量为: [[-0.06896552] [-0.34482759] [ 0.54597701]] 残差为: [6.25171072] 矩阵A的秩为: 3 奇异值为: [2.13261383e+01 1.65604864e+00 3.83414488e-16]
我们可以看到,通过np.linalg.lstsq可以很容易地求出线性方程组的系数向量、残差、矩阵A的秩和奇异值。
2、使用最小二乘逼近函数拟合数据
下面我们来看看如何使用np.linalg.lstsq函数来拟合一组离散数据,以实现最小二乘逼近的效果。
首先,我们通过numpy生成一组离散数据,这里我们使用x轴坐标在[0, 1]范围内的50个点,对应y轴坐标通过sin函数计算得出。
import numpy as np import matplotlib.pyplot as plt # 生成离散数据 x = np.linspace(0, 1, 50) y = np.sin(2 * np.pi * x) # 打印离散数据的图像 plt.plot(x, y, 'o', label='Discrete data') plt.legend() plt.show()
运行结果如下:

得到离散数据后,我们通过np.linalg.lstsq函数进行最小二乘逼近的拟合。
# 将x转换成3x50矩阵,并填充一列1作为截距项 X = np.vstack([x, np.ones(len(x))]).T # 拟合数据 coeff, residuals, _, _ = np.linalg.lstsq(X, y) # 打印拟合后的数据图像 plt.plot(x, y, 'o', label='Discrete data') plt.plot(x, coeff[0] * x + coeff[1], '-r', label='Fitted line') plt.legend() plt.show()
运行结果如下:

我们可以看到,通过np.linalg.lstsq函数的最小二乘逼近拟合,我们得到了一条红色的拟合直线,能够很好地逼近离散数据的变化趋势。
四、总结
np.linalg.lstsq是NumPy中的线性代数函数,被用于解决矩阵方程,可以在最小二乘意义上重建一组观察数据。它的输入为一个m×n的线性矩阵A和一个包含m个独立变量的向量b,输出为一个包含n个未知变量的向量x、残差residuals、矩阵A的秩rank和奇异值s。通过上述的示例可以看出,np.linalg.lstsq函数非常方便易用,可以很容易地求解线性方程组,同时还可以用于最小二乘逼近等应用场景。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/153800.html