在python中查找具有稀疏矩阵特定特征值的特征向量

在python中查找具有稀疏矩阵特定特征值的特征向量,python,numpy,scipy,sparse-matrix,linear-algebra,Python,Numpy,Scipy,Sparse Matrix,Linear Algebra,我有一个大的稀疏矩阵,我想找到它的特征向量和特定的特征值。在scipy.sparse.linalg.eigs中,它表示所需的参数k: “k是所需特征值和特征向量的数量。k必须小于N-1。不可能计算矩阵的所有特征向量” 问题是我不知道有多少特征向量对应于我想要的特征值。在这种情况下,我应该怎么做?我建议改用奇异值分解(SVD)。有一个来自scipy的函数,您可以使用scipy.sparse.linalg导入SVD的SVD,它可以处理稀疏矩阵。您可以通过以下方法找到特征值(在这种情况下为奇异值)和特

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

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


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

我建议改用奇异值分解(SVD)。有一个来自scipy的函数,您可以使用scipy.sparse.linalg导入SVD的SVD
,它可以处理稀疏矩阵。您可以通过以下方法找到特征值(在这种情况下为奇异值)和特征向量:

U, Sigma, VT = svds(X, k=n_components, tol=tol)
其中,
X
可以是稀疏的CSR矩阵,
U
VT
是与
Sigma
中的奇异值相对应的左特征向量和右特征向量的集合。在这里,您可以控制组件的数量。我建议先从小的
n_组件开始,然后再增加它。您可以对
Sigma
进行排序,并查看您的奇异值分布。将有一些大的数字,并迅速下降。您可以对要保留多少个奇异值的特征向量设置阈值


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

你的矩阵是带状矩阵吗?@gboffi我使用了块稀疏行矩阵。通常,带移位的反向迭代是找到单个特征值的方法。细节取决于矩阵的结构和特征值的性质,我们忽略了这一点,看看这一点,这一点适用于当矩阵是对称的和带状的时可能的优化,对于SVD,奇异值是特征值的绝对值,但我的特征值可能包含1和-1。而且,我必须选择那些具有不同大小稀疏矩阵的特定特征值的特征向量数百次,所以我认为这不是一个好方法。啊,明白了。看起来是个更难的问题。我以后还要看一看。