gpt4 book ai didi

python - 如何使用奇异值分解反转 numpy 矩阵?

转载 作者:行者123 更新时间:2023-11-28 21:50:54 28 4
gpt4 key购买 nike

(在你告诉我之前,是的,我知道你不应该永远反转矩阵。不幸的是,对于我的计算,我有一个我构建的矩阵,它必须以某种方式反转。)

我有一个病态的大矩阵 Mnumpy.linalg.cond(M) 输出大小为 e+22 的值。矩阵 M 的形状为 (1000,1000)

自然地,numpy.linalg.inv() 会导致许多精度错误。所以,我使用了 numpy.linalg.solve() 来反转矩阵。

考虑矩阵逆 A^{-1}A * A^{-1} = Identity 定义。numpy.linalg.solve() 计算确定的(即满秩的)线性矩阵方程 ax = b 的“精确”解 x。

所以,我定义单位矩阵:

import numpy as np
iddmatrix = np.identity(100)

并求解:

inverse = np.linalg.solve(M, iddmatrix)

但是,由于我的矩阵如此大且如此病态,np.linalg.solve() 不会给出“精确解”。我需要另一种方法来反转矩阵。

  1. 用 SVD 实现这种逆的标准方法是什么?
  2. 我怎样才能使这个病态矩阵....定义明确?

如有任何建议,我们将不胜感激。谢谢!

最佳答案

由于 SVD 将矩阵 A 分解为 U*S*V,其中 S 是对角线,U , V是正交的,它的逆是V'*inv(S)*U',对角矩阵的逆就是主对角线上数的逆.

>>> A=np.random.rand(1000,1000)
>>> u,s,v=np.linalg.svd(A)
>>> Ainv=np.dot(v.transpose(),np.dot(np.diag(s**-1),u.transpose()))

关于python - 如何使用奇异值分解反转 numpy 矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31251689/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com