【问题标题】:Find one eigenvector找到一个特征向量
【发布时间】: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


【解决方案1】:

你可以使用

from scipy.sparse.linalg import eigs

查看文档字符串 - 有一个参数 k 设置要计算的特征值和向量的数量。如果我没记错的话,这是通过 ARPACK 的迭代方案完成的。因此,请确保将 tol 设置为适合您的应用程序的值。

【讨论】:

  • 感谢您的回复。我认为这回答了如何从频谱的顶部(底部?)找到特征向量的问题。我对如何找到与任何特征值对应的特征向量很感兴趣。
  • 啊,是的,好点,我误解了。典型的算法是逆幂法。不要天真地应用,因为你的矩阵很大。但是谷歌搜索一下表明您原始帖子的第一条评论可能是要走的路。
  • 酷。我的问题很糟糕,因为我的问题措辞有点不准确。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 2011-12-11
  • 2019-01-24
  • 2015-06-30
相关资源
最近更新 更多