谁能详细解释一下return of linalg.lstsq?
Could anyone explain the return of linalg.lstsq in details?
尽管提供了 linalg.lstsq document。还是觉得不太好理解,不够详细。
x : {(N,), (N, K)} ndarray
Least-squares solution. If b is two-dimensional, the solutions are in
the K columns of x.
residuals : {(1,), (K,), (0,)} ndarray
Sums of residuals; squared Euclidean 2-norm for each column in b -
a*x. If the rank of a is < N or M <= N, this is an empty array. If b
is 1-dimensional, this is a (1,) shape array. Otherwise the shape is
(K,).
rank : int
Rank of matrix a.
s : (min(M, N),) ndarray
Singular values of a.
我试着观察输出。但是我只知道rank是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])
你熟悉数学概念吗?
尽管提供了 linalg.lstsq document。还是觉得不太好理解,不够详细。
x : {(N,), (N, K)} ndarray
Least-squares solution. If b is two-dimensional, the solutions are in the K columns of x.
residuals : {(1,), (K,), (0,)} ndarray
Sums of residuals; squared Euclidean 2-norm for each column in b - a*x. If the rank of a is < N or M <= N, this is an empty array. If b is 1-dimensional, this is a (1,) shape array. Otherwise the shape is (K,).
rank : int
Rank of matrix a.
s : (min(M, N),) ndarray
Singular values of a.
我试着观察输出。但是我只知道rank是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])
你熟悉数学概念吗?