我正在寻找计算稀疏矩阵A
的伪逆的列子集的最佳方法。以下是一些相关的事实:
A
是一个稀疏的NxN
矩阵,它具有一个具有已知特征向量的零特征值
我只需要伪逆的M < N/2
列
伪逆是一个密集矩阵
我目前正在使用scipy.linalg.lstsq(A,Id)
(其中Id
是NxM
单位矩阵的NxN
子矩阵),但我怀疑有更好的方法可以做到这一点。
任何建议都将受到赞赏。
更新:由于只有一个零特征值,因此创建可逆扩充(N+1)x(N+1)
矩阵并使用scipy.linalg.solve
会更快。但是,这仍然没有利用A
的稀疏性。
答案 0 :(得分:1)
您正在寻找scipy.sparse.linalg.svds
,它将“计算稀疏矩阵的最大k
奇异值/向量”(虽然这有点误导,因为它也会为密集矩阵做到这一点!)
它使用流行的Fortran77软件包ARPACK中实现的Arnoldi iteration,后者在大多数数学系统(Matlab,R等)中都有包装器。