numpy.linalg.lstsq

linalg.lstsq(a, b, rcond='warn')[源代码]

将最小二乘法返回到线性矩阵方程。

计算近似求解方程的向量x a @ x = b . 方程可以是欠定、好定或过定(即线性独立的行数) a 独立于或小于它的列数。如果 a 是方形的,并且是满等级的,那么 x (但对于舍入误差)是方程的“精确”解。否则, x 最小化欧氏2范数 || b - a x || .

参数
a(m,n)数组类

“系数”矩阵。

b(m,),(m,k)类数组

坐标或“因变量”值。如果 b 是二维的,最小二乘解是为每个 Kb .

rcond可选浮动

小奇异值的截止比 a . 为了确定等级,如果奇异值小于 rcond 乘以最大奇异值 a .

在 1.14.0 版更改: 如果未设置,则给出未来警告。先前的违约 -1 将机器精度用作 rcond 参数,新默认值将使用机器精度时间 max(M, N) . 要使警告静音并使用新的默认值,请使用 rcond=None ,若要继续使用旧行为,请使用 rcond=-1 .

返回
x(n,),(n,k)ndarray

最小二乘法。如果 b 是二维的,解在 Kx .

residuals(1,)、(k,)、(0,)ndarray

残差平方和:中每列的欧氏2范数平方 b - a @ x . 如果排名 a 小于n或m小于等于n,这是一个空数组。如果 b 是一维的,这是一个(1,1)形状数组。否则,形状为(k,)。

rank利息

矩阵秩 a .

s(最小(m,n),darray

的奇异值 a .

加薪
LinAlgError

如果计算不收敛。

参见

scipy.linalg.lstsq

在SciPy中有类似的功能。

笔记

如果 b 是一个矩阵,然后所有数组结果都作为矩阵返回。

实例

安装一条线, y = mx + c ,通过一些噪声数据点:

>>> x = np.array([0, 1, 2, 3])
>>> y = np.array([-1, 0.2, 0.9, 2.1])

通过检查系数,我们可以看到直线应该有一个大约1的梯度,并且在-1处,或多或少地切割Y轴。

我们可以把直线方程改写为 y = Ap 在哪里 A = [[x 1]]p = [[m], [c]] . 现在使用 lstsq 解决 p

>>> A = np.vstack([x, np.ones(len(x))]).T
>>> A
array([[ 0.,  1.],
       [ 1.,  1.],
       [ 2.,  1.],
       [ 3.,  1.]])
>>> m, c = np.linalg.lstsq(A, y, rcond=None)[0]
>>> m, c
(1.0 -0.95) # may vary

按照拟合线绘制数据:

>>> import matplotlib.pyplot as plt
>>> _ = plt.plot(x, y, 'o', label='Original data', markersize=10)
>>> _ = plt.plot(x, m*x + c, 'r', label='Fitted line')
>>> _ = plt.legend()
>>> plt.show()
../../_images/numpy-linalg-lstsq-1.png