【问题标题】:Having problems using numpy linalg svd使用 numpy linalg svd 时遇到问题
【发布时间】:2019-12-08 02:23:59
【问题描述】:

我正在用简单矩阵测试 svd 分解

 A=np.array([[1,2,3],[4,5,6]])

但是当我使用时:

U,D,V=np.linalg.svd(A)

输出是 U whit 形状 (2,2)、D 形状 (2,) 和 V 形状 (3,3) 问题是 V 的形状,svd 算法应该返回一个 2x3 矩阵,因为我的原始矩阵是一个 2x3 矩阵并且我得到 2 个奇异值,但是当我取 V[:2,:] 时它返回一个 3x3 矩阵并制作产品:

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

它返回原始矩阵A,这里发生了什么? 感谢您的阅读和回答,对不起语法,我开始用英语了

【问题讨论】:

    标签: python-3.x numpy linear-algebra svd


    【解决方案1】:

    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.]])
    

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 2021-11-11
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-02-21
      相关资源
      最近更新 更多