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

2024-05-14 20:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用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

你知道怎么回事吗?在


Tags: importtruenp矩阵sklearndotv2svd
1条回答
网友
1楼 · 发布于 2024-05-14 20:18:00

结果发现,这是一个随机的_svd错误,特别是在这个转换上:

B = safe_sparse_dot(Q.T, M)

替换为

^{pr2}$

解决了这个问题。在

相关问题 更多 >

    热门问题