7

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

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

现在,B它太大而无法存储在内存中,但它的排名很低。有没有办法以B一种有效的方式构造和存储,以便即时执行一些基本的读取方法(rowSums、、colSums等),以换取 CPU 或内存?

4

2 回答 2

2

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

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

于 2014-02-13T14:29:41.480 回答
0

这是另一种方法,尽管我想念知道这对于大型矩阵的效率有多高的经验:

如果秩低,则意味着矩阵包含许多不相关的线,它们是其他线的线性组合。如果矩阵表示一个线性方程组,则可以设计一种算法,依次删除这些线。

要检查一条线是否不相关,请检查没有该线的矩阵的秩是否仍然相同。要计算矩阵等级,请参阅这个那个答案。

于 2013-03-28T10:10:30.130 回答