在使用 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 算法应该返回一个 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.]])

相关内容

  • 没有找到相关文章

最新更新