R 大矩阵和内存问题
我正在处理一个巨大的数据集,我想导出一个测试统计数据的分布。因此,我需要使用巨大的矩阵(200000x200000)进行计算,正如您可能预测的那样,我有内存问题。更准确地说,我得到以下信息:错误:无法分配大小的向量。。。国标。我使用64位版本的R,我的RAM是8Gb。我尝试使用bigmemory软件包,但没有取得很大成功 第一个问题是当我必须计算距离矩阵时。我在名为Dist的amap包中发现了这个很好的函数,它可以并行计算数据帧中的列的距离,它工作得很好,但是它会生成下/上三角形。我需要距离矩阵来执行矩阵乘法,不幸的是,我不能使用矩阵的一半。当使用as.matrix函数使其满时,我再次遇到内存问题 因此,我的问题是如何通过跳过as.matrix步骤将dist对象转换为big.matrix。我想这可能是一个Rccp问题,请记住我在Rccp是一个新手 先走一步 将“距离”对象转换为“(大)矩阵时:R 大矩阵和内存问题,r,matrix,r-bigmemory,bigdata,R,Matrix,R Bigmemory,Bigdata,我正在处理一个巨大的数据集,我想导出一个测试统计数据的分布。因此,我需要使用巨大的矩阵(200000x200000)进行计算,正如您可能预测的那样,我有内存问题。更准确地说,我得到以下信息:错误:无法分配大小的向量。。。国标。我使用64位版本的R,我的RAM是8Gb。我尝试使用bigmemory软件包,但没有取得很大成功 第一个问题是当我必须计算距离矩阵时。我在名为Dist的amap包中发现了这个很好的函数,它可以并行计算数据帧中的列的距离,它工作得很好,但是它会生成下/上三角形。我需要距离矩阵
stats:::as.matrix.dist
调用了行
、列
、t
以及创建大型中间对象的运算符。为了避免这些问题,除其他选择外,您可以使用以下方法:
关于数据:
nr = 1e4
m = matrix(runif(nr), nr, 10)
d = dist(m)
然后,慢慢地分配并填写“矩阵”:
(似乎将“md”分配为big.matrix(n,n,init=0)
同样有效)
使用较小的“nr”,我们可以测试:
all.equal(as.matrix(md), as.matrix(d), check.attributes = FALSE)
#[1] TRUE
你可以看看或者。我不确定这是否有助于解决您的内存问题,但它肯定会加快矩阵运算。有一个类似的
big.matrix
距离问题可能会有所帮助。非常感谢alex,这听起来是可行的。让我试试看,我会带着反馈回来:)
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
all.equal(as.matrix(md), as.matrix(d), check.attributes = FALSE)
#[1] TRUE