2017-12-31 141 views
-1

DBSCAN의 eps를 찾고 싶습니다. 나는 한 세트의 포인트를 가지고 있고 각 포인트에서 다른 포인트까지의 거리를 계산할 필요가있다. 모양의 배열이 (2267436, 2) 인 경우 near 및 minpoint를 찾습니다.포인트 간 유클리드 거리를 계산할 때 메모리 오류가 발생했습니다.

xy= [[ 177963.16728699 2506663.75713195] 
[ 176147.50406716 2502422.34894945] 
[ 178480.33178874 2507299.83467826] 
..., 
[ 231205.88139267 2684014.30324774] 
[ 231207.81085397 2684014.52219471] 
[ 231214.870296 2684054.8263628 ]] 

내가 좋아하는이 방법을 시도하고있다 : 여기 내 데이터입니다

dist = scipy.spatial.distance.cdist(xy, xy,'euclidean') 

또는

np.sqrt((np.square(npxy[:,np.newaxis]-npxy).sum(axis=2))) 

또는

dist=scipy.spatial.distance.pdist(npxy) 
d_matrix = scipy.spatial.distance.squareform(dist) 

내가 모든 MemoryError의 무엇입니까

. 알아낼 수있는 해결책이 있습니까?

+4

2267436 2 = 2,570631873330 (2.5 조 이상)의 점 쌍을 선택할 수 있으며 순진한 거리 행렬은 5 조 이상의 항목을 갖습니다. 아마도 알고리즘을 재고해야합니다. –

+1

@FenilPatel 질문을 다시 읽고 "knear"이 정말로 오타인지 또는 [knn] (https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm)을 언급하고 있는지 다시 생각해보십시오. 편집 한 후에도 여전히 사람의 뜻을 이해하지 못하는 경우 먼저 편집하지 마십시오. –

답변

1

몇 가지 매우 쉬운 수학을 사용하면 모든 O (n²) 거리를 메모리에 저장할 수 없다는 것을 알 수 있습니다.

한 번에 한 점의 거리 만 계산하면 문제가 없습니다.

또한 인덱스를 사용하여 런타임을 O (n²)에서 관리 가능한 배율로 줄이십시오.

또는 OPTICS와 같은 최신 알고리즘을 사용합니다.

+0

예! 내가 한 점만 계산하면 괜찮을거야! 하지만이게 내 에세이 작품입니다. 이제 알아낼 필요가 있습니다. 이제는 포인트 거리와 같은 arcmap 도구를 사용하고 있습니다. 시간이 많이 걸리지 만 memoryerror를 얻지는 못할 것입니다. 일어날 때 괜찮습니다. 어쨌든 감사합니다 ! –

관련 문제