我正在尝试寻找numpy矩阵的顶部k引导特征值(使用python点积表示法)。
L@L + a*Y@Y.T,其中L和Y分别是对称的nxn和nxd矩阵。
根据this论文的以下文本,我应该能够用L@(L@v) + a*X@(X.T@v)计算这些前导特征值,其中v是一个任意向量。他们引用的Lanczos论文是here。
我知道scipy有scipy.sparse.linalg.eigsh here,从笔记上看它似乎使用了Lanczos算法--但我不知道是否可以在我的特定用例中使用sparse.linalg.eigsh。我用谷歌搜索了一下,没有很快找到一个Python实现--有人知道我是否可以使用sparse.linalg.eigsh以某种方式计算这个值吗?我绝对不想自己写这个算法。

发布于 2021-04-07 19:59:53
你可以查看scipy.sparse.linalg.eigsh。
import numpy as np;
from scipy.sparse.linalg import eigsh;
from numpy.linalg import eigh
a = 1.4
n = 20;
d = 7;
# random symmetric n x n matrix
L = np.random.randn(n, n)
L = L + L.T
# random n x d matrix
Y = np.random.randn(n, d)
A = L @ L.T + a * Y @ Y.T # your equationA必须是正定的才能使用eigsh,如果是a>0,这是肯定的。
您可以检查四个特征值,如下所示
eigsh(La, 4)[0]作为参考,您可以基于计算所有特征值的numpy.linalg.eigh进行比较。对它们进行排序,并取排序数组的最后四个元素,结果应该是接近的。
np.sort(eigh(La)[0])[-4:]https://stackoverflow.com/questions/66975311
复制相似问题