求助矩阵方面的计算知识

2019-03-11 22:45:41 +08:00
 oIMOo

已知以下两个值:

注:A 为矩阵,A^T 为 A 的转制

求:A

提示:SVD 奇异值分解

实在摸不到头脑,求大佬讲解,甚至关键词都可以。

1434 次点击
所在节点    问与答
9 条回复
xml123
2019-03-11 23:06:47 +08:00
不是有提示了吗……就是奇异值分解的过程啊,你找本矩阵论的书看一下奇异值分解的计算过程就知道了。
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 )的前提下,我怎么把他们拆开???
geelaw
2019-03-11 23:49:03 +08:00
这个问题不完整,你显然是不可能知道 A 具体是谁的——比如 A 等于正负 1 时你拿到的两个矩阵相同。

但想要求一个 A 并不困难,你可以选 UDV',其中 U、V 分别正交相似对角化两个你知道的矩阵,D 是奇异值。
oIMOo
2019-03-11 23:53:43 +08:00
@geelaw 谢谢您的回复。

您能具体说一下么?

对 alpha 求出对应的三个值,Uu,Zu (也就是 sigma ),Vu
对 beta 求出对应的三个值,Uv,Zv (也就是 sigma ),Vv

然后具体怎么计算 A 呢?
我卡在这个逻辑点了……

谢谢
oIMOo
2019-03-11 23:56:46 +08:00
上面代码错了

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, Vu = np.linalg.svd(SDu)
Uv, Zv, Vv = np.linalg.svd(SDv)
lovestudykid
2019-03-12 03:09:53 +08:00
对 alpha 和 beta 分别正交对角化,然后特征值矩阵平方,特征向量矩阵分别作为奇异值分解的左右奇异向量就完事了。对角化的过程用 svd 或者 eig 都行
oIMOo
2019-03-12 09:24:18 +08:00
@xml123 @geelaw @lovestudykid

你们看最后一个 append,我真的不知道错在哪里了……
关键是如果随机生成 A 的话,有时候对,有时候不对,疯掉了……
geelaw
2019-03-12 09:55:14 +08:00
@oIMOo #7 你可以读一下下#3 的前半段。
oIMOo
2019-03-12 18:55:54 +08:00
@geelaw
我在测试的时候手动排除了这点,后续再考虑。
还有人说 A 一定要是个方阵,所以关于 A 长宽不同我也可以后续再考虑。
然而,当 A = np.array([[5, 4, 0], [3, 7, 8], [2, 8, 3]]) 也是不能计算出结果,我就一头雾水……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543494

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX