大矩阵和内存问题
我正在研究一个巨大的数据集,我想推导一个测试统计量的分布。 因此,我需要用巨大的矩阵(200000x200000)进行计算,并且您可能会预测存在内存问题。 更确切地说,我得到以下内容:错误:无法分配大小的向量... Gb。 我在R的64位版本上工作,我的RAM是8Gb。 我试图使用包bigmemory,但没有取得大的成功。
第一个问题出现在我必须计算距离矩阵时。 我在名为Dist的map包中找到了这个很好的函数,它计算并行的数据帧列的距离,它很好地工作,但是它产生了较低/较高的三角形。 我需要距离矩阵来执行矩阵乘法,不幸的是我不能使用矩阵的一半。 当使用as.matrix函数使其充满时,我又遇到了内存问题。
所以我的问题是如何通过跳过as.matrix步骤将dist对象转换为big.matrix。 我想这可能是一个Rccp问题,请记住我是Rccp的新手。
感谢提前!
将“dist”对象转换为“(big。)matrix”: stats:::as.matrix.dist
对创建大型中间对象的row
, col
, t
和运算符进行调用。 避免这些,你可以使用类似的东西:
使用数据:
nr = 1e4
m = matrix(runif(nr), nr, 10)
d = dist(m)
然后,慢慢地分配并填充一个“矩阵”:
#as.matrix(d) #this gives error on my machine
n = attr(d, "Size")
md = matrix(0, n, n)
id = cumsum(c(1L, (n - 1L) - 0:(n - 2L))) #to split "d"
for(j in 1:(n - 1L)) {
i = (j + 1L):n
md[i, j] = md[j, i] = d[id[j]:(id[j] + (n - (j + 1L)))]
}
(似乎将big.matrix(n, n, init = 0)
分配为“md”同样有效)
md[2:5, 1]
#[1] 2.64625973 2.01071637 0.09207748 0.09346157
d[1:4]
#[1] 2.64625973 2.01071637 0.09207748 0.09346157
使用较小的“nr”我们可以测试:
all.equal(as.matrix(md), as.matrix(d), check.attributes = FALSE)
#[1] TRUE
链接地址: http://www.djcxy.com/p/31861.html