numpy 在python 3中从SVD重构矩阵

ni65a41a  于 2023-05-17  发布在  Python
关注(0)|答案(2)|浏览(116)

基本上我的问题是,我有一个矩阵,我已经SVD分解了,并把它放在变量u,s和v中。我对s矩阵做了一些修改,使其成为对角矩阵,并修改了一些数字。现在我基本上是试图把它重建成一个规则的矩阵,从3个矩阵回到原来的矩阵。有谁知道有什么函数可以做到这一点吗?我似乎在numpy中找不到任何这样的例子。

8ulbf1ek

8ulbf1ek1#

唯一稍微有点棘手的是“扩展”s如果你安装了scipy,它有scipy.linalg.diagsvd可以为你做这件事:

>>> import numpy as np
>>> import scipy.linalg as la
>>> 
>>> rng = np.random.default_rng()
>>> A = rng.uniform(-1,1,(4,3))
>>> u,s,v = np.linalg.svd(A)
>>> 
>>> B = u@la.diagsvd(s,*A.shape)@v
>>> 
>>> np.allclose(A,B)
True
cwtwac6a

cwtwac6a2#

我算出来了,只需要使用np.matmul()函数,然后将u和v的3个矩阵相乘,就足以将它们恢复为原始矩阵。

相关问题