【问题标题】:Remultiply matrices after SVDSVD 后的矩阵重乘
【发布时间】:2021-07-01 18:18:13
【问题描述】:

我有一个矩阵 A,我需要计算它的 SVD,将最后一个奇异值设置为 0,然后在 numpy 中重新组合(SVD 清理)。 我这样做了:

t4 = np.random.randn(3, 3)
u, s, vh = np.linalg.svd(t4, full_matrices=False)
s[-1] = 0
t5 = u @ s @ vh

我希望结果是一个 3x3 矩阵,但结果似乎是一个形状为 (3,) 的行向量。

请大家提出我可能做错了什么?谢谢!

【问题讨论】:

  • 你的意思是(u * s) @ vh吗? s 是 1x3,所以 mat mult 永远不会产生 3x3。
  • 是的@TimRoberts 非常感谢!

标签: python numpy linear-algebra svd


【解决方案1】:

s 以一维数组的形式返回,项在对角线上,您可以使用 diag 构造一个矩阵

t5 = u @ np.diag(s) @ vh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 2014-02-26
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多