谁能详细解释linalg.lstsq的返回?

问题描述 投票:0回答:1

尽管提供了linalg.lstsq document。我仍然很难理解,因为它不够详细。

x:{(N,),(N,K)} ndarray

最小二乘解。如果b是二维的,则解在x的K列。

残差:{(1,),(K,),(0,)} ndarray

残差之和; b中每个列的平方欧几里德2范数-斧头。如果a的秩为

rank:int

矩阵a的等级。

s:(min(M,N),)ndarray

a的奇异值

我试图观察输出。但是我只知道排名是2。对于其余的,我不知道为什么。

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T
print(A)
print('-------------------------')
print(np.linalg.lstsq(A, y, rcond=None))

礼物

[[0. 1.]
 [1. 1.]
 [2. 1.]
 [3. 1.]]
-------------------------
(array([ 1.  , -0.95]), array([0.05]), 2, array([4.10003045, 1.09075677]))

我不理解元组“((N,),(N,K),(1,),(K,),(0,),(M,N)”表示什么。

例如,np.linalg.lstsq(A, y, rcond=None)[0]将是array([ 1. , -0.95])它与{(N,),(N,K)}有什么关系?

python numpy least-squares
1个回答
0
投票

那些元组是输入和输出的可能形状。在您的示例中,A.shape = (4, 2)y.shape = (4,)。查看文档M = 4N = 2,我们正在处理没有K的情况。因此,输出的形状应为x.shape = (N,) = (2,)residuals.shape = (1,)s.shape = (min(M, N),) = (2,)

让我们一次查看一个输出

>>> x, residuals, rank, s = np.linalg.lstsq(A, y, rcond=None)

[xA @ x = y的最小二乘解,因此它使np.linalg.norm(A @ x - y)**2最小化:

>>> A.T @ (A @ x - y)
array([1.72084569e-15, 2.16493490e-15])

其他输出在那里告诉您此解决方案有多好,以及它对数值误差的敏感程度。

[residualsA @ xy之间的不匹配的平方范数:

>>> np.linalg.norm(A @ x - y)**2
0.04999999999999995
>>> residuals[0]
0.04999999999999971

[rankA的等级:

np.linalg.matrix_rank(A)
2
>>> rank
2

[s包含A的奇异值

>>> np.linalg.svd(A, compute_uv=False)
array([4.10003045, 1.09075677])
>>> s
array([4.10003045, 1.09075677])

您是否熟悉数学概念?

© www.soinside.com 2019 - 2024. All rights reserved.