2016-07-23 65 views
0

我试图让两个光栅之间的(DIS)的相似性与emd2d的定量估计(从emdist库版本。0.3-1)。 下面的代码运行于小矩阵(〜35x35),但我的栅格大得多(〜5000x3000)和我得到一个存储器错误:[R计算堆土机距离大型栅格

错误EMDR(A,B,DIST = DIST。 ..):
无法在emdist

这里存储(-1608.8 MB)是一个示例代码来说明问题:

#test case: 
library(emdist) 
Rows = 40 
Cols = 40 
Mat1 = matrix( 
     seq(1,Rows*Cols), 
     nrow = Rows, 
     ncol = Cols) 

m0 <- matrix(0, Rows, Cols) 
Mat_Rand = apply(m0, c(1,2), function(x) rnorm(1)) #sample(c(0,1),1)) 
Mat2 = Mat1 * Mat_Rand 

emd2d(Mat1,Mat2,dist="euclidean") 

我对运行中的RR版本3.2.5 win7 64bit。

由于

Ilik

+0

请注明什么问题?你可能用完了内存。 – shayaa

回答

0

要绕过的存储器限制,可以采取矩阵的样品,例如随机选择每行40行中的30个和每行40行中的30个,以形成一个新的矩阵,从而将配对从100多万减少到不到50万。

seed.set(1234) 
row.rand = sample(1:40, 30) 
col.rand = sample(1:40, 30) 
Mat1.new = matrix(NA, 30,30) 
Mat2.new = matrix(NA, 30,30) 
for(i in 1:length(row.rand)){ 
    for(j in 1:length(col.rand)){ 
     Mat1.new[i,j] = Mat1[row.rand[i],col.rand[j]] 
     Mat2.new[i,j] = Mat2[row.rand[i],col.rand[j]] 
    } 
} 
emd2d(Mat1.new, Mat2.new)