2016-07-23 66 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)