计算scipy.sparse矩阵的伪逆的列子集的最快方法

时间:2016-05-27 17:23:59

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

我正在寻找计算稀疏矩阵A的伪逆的列子集的最佳方法。以下是一些相关的事实:

  1. A是一个稀疏的NxN矩阵,它具有一个具有已知特征向量的零特征值

  2. 我只需要伪逆的M < N/2

  3. 伪逆是一个密集矩阵

  4. 我目前正在使用scipy.linalg.lstsq(A,Id)(其中IdNxM单位矩阵的NxN子矩阵),但我怀疑有更好的方法可以做到这一点。

    任何建议都将受到赞赏。

    更新:由于只有一个零特征值,因此创建可逆扩充(N+1)x(N+1)矩阵并使用scipy.linalg.solve会更快。但是,这仍然没有利用A的稀疏性。

1 个答案:

答案 0 :(得分:1)

您正在寻找scipy.sparse.linalg.svds,它将“计算稀疏矩阵的最大k奇异值/向量”(虽然这有点误导,因为它也会为密集矩阵做到这一点!)

它使用流行的Fortran77软件包ARPACK中实现的Arnoldi iteration,后者在大多数数学系统(Matlab,R等)中都有包装器。