【发布时间】:2019-12-18 10:19:20
【问题描述】:
我正在尝试创建一个 300kx300k 的稀疏矩阵,但我在 r 中遇到了内存问题,我使用的是 8gb Windows 10 笔记本电脑,此时获得一台具有更大内存的计算机会很困难,什么可以我确实在没有内存分配错误的情况下有效地创建了这个稀疏矩阵
我已经通过了 bigmemory 包,但我无法掌握它,因为它无法处理稀疏矩阵
这是一个较小的数据集,我计算它没有任何问题,但是当我尝试计算 300k x 300k 矩阵时出现问题
fam <- structure(list(ID = c(1L, 2L, 3L, 4L, 6L, 5L, 7L), dad = c(0L,
0L, 1L, 1L, 1L, 3L, 5L), mum = c(0L, 0L, 0L, 2L, 4L, 4L, 6L),
GEN = c(1L, 1L, 2L, 2L, 3L, 3L, 4L)), class = "data.frame", row.names = c(NA,
-7L))
library(Matrix)
hom = function(fam) {
t1 <- min(which.max(fam$dad > 0), which.max(fam$mum > 0))
t2 <- max(fam[["ID"]])
A<-Matrix(0, nrow=t2,ncol=t2, sparse=TRUE)
diag(A) <- 2-0.5^(fam[["GEN"]]-1)
for (t in t1:t2) {
A[t,t]<- sum(c(A[t,t], 0.5^(fam[t,"GEN"])*A[fam[t,"dad"],fam[t,"mum"]]))
for(j in 1:(t-1)) {
A[t,j]<- 0.5 * sum(c(A[j,fam[t,"dad"]],A[j,fam[t,"mum"]]))
A[upper.tri(A)] <- t(A)[upper.tri(A)]
}
}
A
}
我希望能够在不消耗大量内存的情况下有效地创建这个稀疏矩阵,但我遇到了这个错误:
Error: cannot allocate vector of size 300Gb
请问我该怎么办?
【问题讨论】:
-
您还没有向我们展示创建大矩阵的代码。您创建的 7x7 矩阵并不稀疏。
-
我会去掉
upper.tri行,让它成为你的旧行。A[j, t] <- A[t,j]的强度低于upper.tri版本。并不是说它对您的 300 GB 分配问题有帮助。 -
@user2554330 我同意生成的矩阵不是稀疏的。这是原帖stackoverflow.com/questions/57301390/…
标签: r memory bigdata vectorization sparse-matrix