【发布时间】:2015-06-26 17:21:14
【问题描述】:
假设我有一个非常大的(对称)矩阵 M,大小为 N × N,我只想提取一个与一个特征值对应的特征向量。有没有办法在不找到所有特征向量的情况下做到这一点。我想到的一种方法是首先找到特征值(速度很快),然后求解一个特征向量。
E = np.linalg.eigvalsh(M)
e = E[N/2]
v = np.linalg.solve(E-np.diag([e]*N), 0)
当然你可以猜到这个的解只是v=0。我可以对 M-eI 进行 SVD 分解,但这似乎比仅计算 M 的所有特征向量要慢。
【问题讨论】:
-
IIRC,
shift-qr是可以做到这一点的算法。 docs.scipy.org/doc/scipy-0.15.1/reference/generated/…。sigma参数可能特别有趣。请注意,这是稀疏的 linalg 版本。我不确定在常规 linalg 模块中是否也实现了shift-qr算法。 -
Sigma 正是我正在寻找的参数。谢谢@cel!
标签: performance numpy scipy eigenvalue eigenvector