gpt4 book ai didi

python - sklearn 截断 svd 不适用于复杂矩阵

转载 作者:行者123 更新时间:2023-12-05 07:41:05 28 4
gpt4 key购买 nike

我正在尝试使用 sklearn 的随机版本 TruncatedSVD (尽管我实际上是在调用内部函数 randomized_svd 来获取实际的 u、s、v 矩阵)。虽然它适用于实数矩阵,但对于复数矩阵,即使奇异值完全正确,我也无法取回原始矩阵:

>>> import numpy as np
>>> from sklearn.utils.extmath import randomized_svd
>>> N = 3
>>> a = np.random.rand(N, N)*(1 + 1j)
>>> u1, s1, v1 = np.linalg.svd(a)
>>> u2, s2, v2 = randomized_svd(a, n_components=N, n_iter=7)
>>> np.allclose(s1, s2)
True
>>> np.allclose(a, u1.dot(np.diag(s1)).dot(v1))
True
>>> np.allclose(a, u2.dot(np.diag(s2)).dot(v2))
False

知道哪里出了问题吗?

最佳答案

原来这是randomized_svd的一个bug,具体在这个转换上:

B = safe_sparse_dot(Q.T, M)

替换为

B = safe_sparse_dot(Q.T.conj(), M)

解决问题。

关于python - sklearn 截断 svd 不适用于复杂矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611574/

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