我正在用简单的矩阵测试 svd 分解
A=np.array([[1,2,3],[4,5,6]])
但是当我使用:
U,D,V=np.linalg.svd(A)
输出为 U 白色形状 (2,2(、D 与形状 (2,( 和 V 与形状 (3,3( 问题是 V 的形状,svd 算法应该返回一个 2x3 矩阵,因为我的原始矩阵是一个 2x3 矩阵,我得到了 2 个奇异值,但它返回一个 3x3 矩阵,当我取 V[:2,:] 并制作产品时:
U.dot(np.diag(D).dot(V[:2,:]))
它返回原始矩阵 A,这里发生了什么? 感谢您的阅读和回答,对不起语法,我从英语开始
这在文档字符串中进行了解释,但可能需要一些阅读才能获得它。 布尔参数full_matrices
确定返回数组的形状。 在您的情况下,您需要full_matrices=False
,例如:
In [42]: A = np.array([[1, 2, 3], [4, 5, 6]])
In [43]: U, D, V = np.linalg.svd(A, full_matrices=False)
In [44]: U @ np.diag(D) @ V
Out[44]:
array([[1., 2., 3.],
[4., 5., 6.]])