基本上我的问题是,我有一个矩阵,我已经SVD分解了,并把它放在变量u,s和v中。我对s矩阵做了一些修改,使其成为对角矩阵,并修改了一些数字。现在我基本上是试图把它重建成一个规则的矩阵,从3个矩阵回到原来的矩阵。有谁知道有什么函数可以做到这一点吗?我似乎在numpy中找不到任何这样的例子。
8ulbf1ek1#
唯一稍微有点棘手的是“扩展”s如果你安装了scipy,它有scipy.linalg.diagsvd可以为你做这件事:
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
cwtwac6a2#
我算出来了,只需要使用np.matmul()函数,然后将u和v的3个矩阵相乘,就足以将它们恢复为原始矩阵。
2条答案
按热度按时间8ulbf1ek1#
唯一稍微有点棘手的是“扩展”
s
如果你安装了scipy
,它有scipy.linalg.diagsvd
可以为你做这件事:cwtwac6a2#
我算出来了,只需要使用np.matmul()函数,然后将u和v的3个矩阵相乘,就足以将它们恢复为原始矩阵。