【发布时间】:2016-09-26 03:08:02
【问题描述】:
我正在寻找计算稀疏矩阵A 的伪逆列的子集的最佳方法。以下是一些相关事实:
A是一个稀疏的NxN矩阵,其特征值为零且特征向量已知我只需要伪逆的
M < N/2列伪逆是密集矩阵
我目前正在使用scipy.linalg.lstsq(A,Id)(其中Id 是NxN 单位矩阵的NxM 子矩阵),但我怀疑有更好的方法来做到这一点。
任何建议将不胜感激。
更新:由于只有一个零特征值,因此创建一个可逆的增广(N+1)x(N+1) 矩阵并使用scipy.linalg.solve 会更快。但是,这仍然没有利用A 的稀疏性。
【问题讨论】:
-
scipy.sparse.linalg.inv说“如果 A 的逆是非稀疏的,那么将 A 转换为密集并使用 scipy.linalg.inv 可能会更快。” -
我试图尽可能地增加 N,但在某些时候使用密集矩阵确实不再是一个可行的选择。由于我不需要完整的逆,我的想法是迭代稀疏求解器可能会更好。
-
我可以滔滔不绝地讲述有关稀疏矩阵格式的各种细节,但对逆方法没有深入研究。
-
你真的需要伪逆本身,还是只是用它来求解线性系统?另外,您的稀疏矩阵是什么格式(CSR、CSC 等)?
-
在scikit-learn TruncatedSVD 中尝试使用各种 n_iter 的随机 SVD。你的 A 有多大/有多稀疏?位置定义?另外,请添加标签
sparse-matrix。
标签: python matrix scipy linear-algebra sparse-matrix