2016-07-23 8 views
0

emd2d (emdist 라이브러리 버전 0.3-1)에서 두 래스터 사이의 (dis) 유사성을 정량적으로 추정하려고합니다. , EMDR (A, B, DIST = DIST에서R 큰 라 스터의 지구 이동 거리 계산

오류 : 다음 코드는 작은 행렬 (~ 35x35)에 잘 실행,하지만 내 래스터는 (~ 5000x3000) 더 큰 내가 메모리 오류를 얻고있다. ..) :

#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을 실행하고 있습니다 : 다음

emdist 메모리 (-1608.8 MB) 할 수 없음
는 문제를 설명하는 샘플 코드입니다 win7 64 비트.

감사

Ilik

+0

문제점을 지정해주십시오. 기억이 부족한 것 같습니다. – shayaa

답변

0

메모리의 한계를 우회하기 위해, 당신은 행렬의 샘플, 예를 취할 수 있습니다 행당 40 개 중 30 개를 선택하고 열당 40 개 중 30 개를 선택하여 새로운 행렬을 구성하여 쌍을 1 백만 개 이상에서 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)