oIMOo
2019-03-11 23:35:00 +08:00
我找到了这篇文章:
https://liam.page/2017/11/22/SVD-for-Human-Beings/
其中 “如何计算 SVD ” *可能*与我的问题相关。
理想情况是:
针对 A 可以分解成 UΣV。
根据上述理想情况:
- A * A^T 可以分别分解成 UΣV * VΣU.
- A^T * A 可以分别分解成 VΣU * UΣV.
所以,还是不知道怎么求 A 啊……
相关代码:
import numpy as np
A = np.array([[2, 4],[1,3],[0,0],[0,0]])
AT = np.transpose(A)
SDu = np.matmul(A, AT) #alpha
SDv = np.matmul(AT, A) #beta
UA, ZA, VA = np.linalg.svd(A)
UAT, ZAT, VAT = np.linalg.svd(AT)
Uu, Zu, Zu = np.linalg.svd(SDu)
Uv, Zv, Zv = np.linalg.svd(SDv)
-------
另外有一篇论文。
说到:
- A * A^T = (U Σ V^T) * (V Σ^T U^T) = U Z Z^T U^T
- A^T * A = (V Σ^T U^T) * (U Σ V^T) = V Z^T Z V^T
同样使用上面的代码,可以验证这个式子。
但是,我怎么求 A ???
也就是说,让我只有两个乘积( alpha、beta )的前提下,我怎么把他们拆开???