2010-07-21 46 views
8

我想计算一个巨大矩阵的Moore–Penrose pseudoinverse。理想情况下,我想在一个有2300万行和1000列的矩阵上做,但如果需要的话,我可以通过仅在我的实验的一部分上运行来将行数减少到400万。大规模伪逆

显然,将矩阵加载到内存中并在其上运行SVD是行不通的。 WikipediaKrylov subspace方法和提ArnoldiLanczosConjugate gradientGMRES(广义最小余量),的BiCGSTAB(双共轭梯度稳定的),QMR(准微小残留),TFQMR(转置 - 自由QMR)和MINRES法(微小残留)的方法作为最好的Krylov子空间方法之一。但我不知道该从哪里出发。计算这样一个巨大矩阵的伪逆是否可行?如果是这样,使用哪种算法或软件库?我有一个可用的大型计算集群,因此欢迎使用并行方法。

This answer指向R包biglm。这会起作用吗?有没有人用过它?我通常使用Python工作,但不介意使用其他语言和工具来执行此特定任务。

+0

矩阵是否有特殊的块结构? – Joel 2010-07-21 15:48:50

+0

@Joel:不,几乎所有的元素都是非零的。 – 2010-07-21 16:17:41

+0

伪逆是最终产品还是你计算的东西呢? – user382751 2010-07-21 16:57:38

回答

2

使用直接收敛到最小二乘解的块迭代算法,而不是通过伪逆计算最小二乘解,可能会更好。参见Charlie Byrne的“Applied Iterative Methods”。这些算法与Krylov子空间方法密切相关,但为便于计算而进行了调整。您可以通过阅读他的书的preprint of another的第3章来进行介绍。