Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我知道 R 中有一些包可以有效地存储稀疏矩阵。还有一种方法可以有效地存储低秩矩阵吗?例如:
A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1) B <- A %*% t(A)
现在,B它太大而无法存储在内存中,但它的排名很低。有没有办法以B一种有效的方式构造和存储,以便即时执行一些基本的读取方法(rowSums、、colSums等),以换取 CPU 或内存?
B
rowSums
colSums
您的问题已经是答案:为了有效地存储这样一个低秩矩阵,您需要创建一个包含这两个因素的数据结构。如果需要矩阵向量乘法,可以使用因子的矩阵向量乘积从右到左完成。
这种策略和数据结构的一个应用可以在有限内存 Broyden 或 BFGS 准牛顿方法的实现中找到。
这是另一种方法,尽管我想念知道这对于大型矩阵的效率有多高的经验:
如果秩低,则意味着矩阵包含许多不相关的线,它们是其他线的线性组合。如果矩阵表示一个线性方程组,则可以设计一种算法,依次删除这些线。
要检查一条线是否不相关,请检查没有该线的矩阵的秩是否仍然相同。要计算矩阵等级,请参阅这个和那个答案。