我试图获得一个非常大、非常稀疏、秩退化、奇异和方阵的 Moore-Penrose 伪逆。(,接近等级)。该矩阵是拉普拉斯图,我需要找到大量节点之间的电阻距离(LU确定太慢)。我意识到逆将非常密集,但我想坚持它,以便我可以查询距离指标 ad-hoc 。我一直在尝试一些粗暴的方法,将其转换为大型内存机器(124GB)上的密集矩阵(~25GB)。
lstsq( scipy.linalg.pinv) 和一些 SVD 方法 ( )都会numpy.linalg.pinv很快耗尽内存。唯一有效的方法是缓慢但内存高效的 SVD ( scipy.linalg.pinv2)。
我正在探索可以平衡内存效率和速度的其他技术,尽管我还没有尝试scipy.sparse.inv或scipy.sparse.svds进行彻底的比较。我认为任何迭代方法都不会奏效,因为我无法提供一个体面的起点。我认为这使 QR 成为主要候选人。我一直在探索本文中列出的一些方法。我有以下问题:
- 我想对 MPI 的选定条目进行采样,以临时方式计算大量图形节点之间的距离。有没有比保留整个矩阵更好的方法来采样 MPI 的选择元素?
- 有没有特别适合我的矩阵类型的算法?
- QR 分解是我最好的选择吗?我应该考虑其他一些方法吗?
- 如果是 QR,存在哪些内存高效的 QR 实现?或者我需要用手从纸上卷一个吗?