有效地存储大而低秩的矩阵

时间:2013-03-14 00:46:09

标签: r matrix rank cran

我知道R中有包可以有效地存储稀疏矩阵。还有一种方法可以有效地存储低秩矩阵吗?例如:

A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1)
B <- A %*% t(A)

现在,B太大而无法存储在内存中,但排名较低。是否有任何方法以有效的方式构造和存储B,以便一些基本的读取方法(rowSumscolSums等)即时执行,以便进行交易cpu还是内存?

2 个答案:

答案 0 :(得分:2)

您的问题已经是答案:要有效地存储这样的低秩矩阵,您需要创建包含这两个因子的数据结构。如果需要矩阵向量乘法,可以使用因子的矩阵向量乘法从右到左完成。

这种策略和数据结构的一个应用可以在有限存储器Broyden或BFGS准牛顿方法的实现中找到。

答案 1 :(得分:0)

这是另一种方法,虽然我很想知道这对于大型矩阵的效率如何:

如果排名较低,则表示矩阵包含许多不相关的行,这些行是其他行的线性组合。如果矩阵表示线性方程组,则可以设计一种算法,该算法连续删除这些线。

要检查线是否无关,请检查没有该线的矩阵的等级是否仍然相同。要计算矩阵排名,请参阅thisthat answer。