2014-01-22 2 views
1

"할당이 이 (가)"이 아닌 오류를 방지하려면 적절한 방식으로 거대한 거리 매트릭스를 할당하는 방법. 어떤 공간에 무작위로 100,000 포인트가 퍼져 있다고 상상해보십시오. DistMatrix의 절반 인 을 나타내는 행렬 또는 "dist"-object를 어떻게 영리하게 만들 수 있습니까? 어쩌면 많은 수의 거리를 효율적으로 할당 할 수있는 또 다른 객체 여야합니다.큰 거리 매트릭스를 만드는 방법은 무엇입니까?

는 다음 링크에서 polygonial 개체를 얻을 수 있습니다 : https://www.dropbox.com/sh/65c3rke0gi4d8pb/LAKJWhwm-l

# Load required packages 
library(sp) 
library(maptools) 
library(maps) 

# Load the polygonal object 
x <- readShapePoly("vg250_gem.shp") 

# Sample or Pick up a large Number of Points 
# this command needs some minutes to be done. 
# "coord" is SpatialPoints Object 
n <- 1e5 
coord <- spsample(x, n, "random") 
# Try to measure the distances by dist() 

DistMatrix <- dist([email protected]) 
Error: negative length vectors are not allowed 

# Try to measure the distances by spDists() 
DistMatrix <- spDists(coord) 
Error: cannot allocate vector of size (some number) MB 

# It seems that the problem lies on large matrix to be created. 

는 방법 "N"의 큰 숫자 R에 풀 수있는이 문제입니다.

답변

0

이 시점에서 R은 RAM의 메가 바이트의 난수를 할당 할 수 없습니다. 이 시점에서 귀하의 컴퓨터는 다른 곳의 모든 메모리를 사용하고 있으며 귀하의 프로세스가 계속 진행될 수있는 메가 바이트 (일부)는 없습니다. 이 시점에서 몇 가지 해결책이 있습니다. 그 중 더 많은 RAM을 가진 기계를 얻거나, 프로그램을 닫거나, 소규모 배치로 거리 계산을하십시오. 더 작은 n을 시도하십시오; 그리고 그것이 작동 할 때 거리의 전체 행렬을 가질 때까지 여러 번 과정을 반복하십시오.

+0

작은 배치로 말하면 spDistsN1()을 사용하는 것일뿐입니다. 아이디어를 명확히 할 수 있다면 유용 할 수 있습니다. 미리 감사드립니다. –

+0

안녕하세요. 나는 그 접근법에 익숙하지 않다. 그러나 그것이 당신을 위해 잘 작동한다면. 저는 실제로 거리 매트릭스를 부분 매트릭스로 나누고 각각의 부분 매트릭스를 하나씩 풀기를 의미합니다. 결과를 하드 드라이브에 매번 저장합니다. RAM을 확보하십시오. –

+0

당신은 sum, sqrt 등과 같은 단순한 계산 작업을 빠르게하는 패키지를 알고 있습니다. 나는 그것을 허용하는 꾸러미가있다라고 들었다. 그러나 나는 아무것도 발견 할 수 없었다. –

관련 문제