2013-08-09 4 views
4

"특정 이웃을 찾아서" 알고리즘을 사용합니다. 특정 조건을 만족하지 않는 노드를 거부하고 어떻게해야 할 지 생각할 수 없습니다 효율적으로.조건을 만족하는 가장 가까운 k 이웃 노드 (파이썬)

내가 밟은 것은 현재 시야에있는 k 개의 가장 가까운 이웃을 찾는 것입니다. 불행하게도 scipy.spatial.cKDTree은 조건부로 포인트를 거부하기 위해 필터로 검색하는 옵션을 제공하지 않습니다.

가장 좋은 알고리즘은 n 개의 가장 가까운 이웃을 쿼리하고 시야가 보이는 k가없는 경우 2n 개의 가장 가까운 이웃을 다시 쿼리하여 반복하는 것입니다. 불행히도 이것은 최악의 경우 반복적으로 n 개의 가장 가까운 이웃을 반복해서 다시 계산하는 것을 의미합니다. 이 쿼리를 반복해야 할 때마다 성능이 저하됩니다. 반면에 n을 너무 높게 설정하면 반환되는 점의 대부분이 필요하지 않으면 잠재적으로 낭비입니다.

시야가 자주 바뀌므로 매번 cKDTree을 다시 계산할 수 없습니다. 어떤 제안?

답변

0

당신이 시선에서 이웃을 찾는 경우는,

cKDTree.query_ball_point (자기, X, R, P, 분기 EPS)

같은 방법을 사용할 수 있습니다 r x 배열 포인트 주변에 r의 반경 안에있는 이웃에 대해 KDTree를 쿼리 할 수 ​​있습니다. 질문을 오해하지 않는 한 시선이 알려지며이 값은 값과 같습니다.

+0

이 문제의 시선은 다음 조건을 만족하는 다각형으로 설명됩니다. 임의의 임의 점에서 쿼리 된 점까지의 선은 미리 정의 된 모서리 집합과 교차하지 않습니다. [예] (http://www.blog.samclifton.com/?p=31) 너무나 반경이 고정되어 있지 않습니다. – user2667523

관련 문제