尽管提供了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)}有什么关系?
那些元组是输入和输出的可能形状。在您的示例中,A.shape = (4, 2)
和y.shape = (4,)
。查看文档M = 4
,N = 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)
[x
是A @ x = y
的最小二乘解,因此它使np.linalg.norm(A @ x - y)**2
最小化:
>>> A.T @ (A @ x - y)
array([1.72084569e-15, 2.16493490e-15])
其他输出在那里告诉您此解决方案有多好,以及它对数值误差的敏感程度。
[residuals
是A @ x
和y
之间的不匹配的平方范数:
>>> np.linalg.norm(A @ x - y)**2
0.04999999999999995
>>> residuals[0]
0.04999999999999971
[rank
是A
的等级:
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])
您是否熟悉数学概念?