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

Fastest way to compute a subset of columns of the pseudoinverse of a scipy.sparse matrix

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

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

  2. 我只需要伪逆

  3. M < N/2
  4. 伪逆是稠密矩阵

我目前正在使用 scipy.linalg.lstsq(A,Id)(其中 IdNxN 单位矩阵的 NxM 子矩阵),但我怀疑有更好的方法这个。

如有任何建议,我们将不胜感激。

更新: 由于只有一个零特征值,事实证明创建可逆增广 (N+1)x(N+1) 矩阵并使用 scipy.linalg.solve 会更快。然而,这仍然没有利用 A 的稀疏性。

您正在寻找 scipy.sparse.linalg.svds,它将“计算稀疏矩阵的最大 k 奇异值 values/vectors”(尽管这有点误导,因为它会为密集矩阵执行此操作矩阵也是!)。

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