使用 numpy linalg svd 时遇到问题

Having problems using numpy linalg svd

我正在用简单矩阵测试 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 算法应该 return 一个 2x3 矩阵,因为我的原始矩阵是一个 2x3 矩阵并且我得到 2 个奇异值,但它 return 一个 3x3 矩阵,当我取 V[:2,:] 并使产品:

U.dot(np.diag(D).dot(V[:2,:]))

它return是原始矩阵A,这里发生了什么? 感谢您的阅读和回答,抱歉语法问题,我是从英语开始的

这在 docstring 中有解释,但可能需要多读几遍才能理解。布尔参数 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.]])