【问题标题】:Find eigenvectors with specific eigenvalue of sparse matrix in python在python中查找具有特定稀疏矩阵特征值的特征向量
【发布时间】:2017-10-21 07:47:21
【问题描述】:

我有一个大的稀疏矩阵,我想找到具有特定特征值的特征向量。在 scipy.sparse.linalg.eigs 中,它表示所需的参数 k:

“k是所需的特征值和特征向量的数量。k必须小于N-1。不可能计算矩阵的所有特征向量”。

问题是我不知道我想要的特征值对应的特征向量有多少。这种情况我该怎么办?

【问题讨论】:

标签: python numpy scipy sparse-matrix linear-algebra


【解决方案1】:

我建议改用奇异值分解 (SVD)。 scipy 有一个函数,您可以在其中使用 SVD from scipy.sparse.linalg import svds,它可以处理稀疏矩阵。您可以通过以下方式找到特征值(在这种情况下将是奇异值)和特征向量:

U, Sigma, VT = svds(X, k=n_components, tol=tol)

其中X 可以是稀疏CSR 矩阵,UVT 是对应于Sigma 中奇异值的左特征向量和右特征向量的集合。在这里,您可以控制组件的数量。我会说先从小的n_components 开始,然后再增加它。您可以对您的Sigma 进行排名,并查看您拥有的奇异值的分布情况。会有一些很大的数字并迅速下降。您可以对要保留的奇异值的特征向量数量设置阈值。

如果你想使用scikit-learn,有一个类sklearn.decomposition.TruncatedSVD可以让你按照我的解释去做。

【讨论】:

  • 对于 SVD,奇异值是特征值的绝对值,但我的特征值可能包含 1 和 -1。另外,我必须数百次选择具有不同大小稀疏矩阵的特定特征值的那些特征向量,所以我认为这对我来说不是一个好方法。
  • 啊,明白了。似乎是一个更难的问题。我以后得看看。
猜你喜欢
  • 1970-01-01
  • 2013-09-25
  • 2015-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-30
  • 2023-03-29
相关资源
最近更新 更多