2017-12-08 17 views
0

임의의 정수가 지정된 3D 좌표로 kd 트리를 작성하려고합니다. 예를 들어 튜플 ([34534.65424, 10957.00023, -79.154323], 32).보조 식별자가 각 포인트에 할당 된 Scipy kd-tree

그러나 scipy.spatial.cKDTree()를 numpy 배열 이외의 다른 방법으로 사용하는 방법을 찾을 수 없습니다.
식별자는 numpy 배열의 네 번째 필드 일 수도 있지만 트리는 처음 세 좌표 만 기반으로 작성해야합니다. 누군가가이 문제에 대해 의견을 개진 할 수 있습니까? 나중에 kd-tree 노드를 나중의 비교를 위해 그것이 속한 세그먼트로 다시 참조하는 것입니다.

감사합니다.

답변

1

트리 구조와 쿼리에 대한 응답은 값이 아니라 인덱스로 제공되므로 동일한 순서로 별도의 배열에 레이블을 유지할 수 있습니다.

데모 : 바로 모든 시간 내 앞에 있었다

a = np.random.rand(100, 3) 
t = cKDTree(a) 
t.tree.indices 
# array([13, 12, 18, 19, 20, 47, 54, 55, 83, 88, 82, 40, 31, 10, 45, 22, 15, 
#  95, 76, 46, 94, 62, 5, 84, 74, 63, 80, 81, 59, 9, 34, 29, 71, 61, 
#  73, 4, 85, 0, 16, 39, 35, 26, 53, 69, 77, 6, 36, 97, 57, 78, 90, 
#  32, 38, 68, 65, 96, 3, 24, 66, 11, 86, 89, 91, 30, 67, 42, 28, 33, 
#   7, 44, 8, 17, 60, 56, 41, 43, 92, 51, 58, 2, 93, 21, 14, 64, 70, 
#  87, 72, 50, 25, 49, 98, 37, 99, 52, 1, 48, 75, 79, 23, 27]) 

t.query_pairs(0.1) 
# {(20, 55), (48, 98), (6, 35), (38, 89), (98, 99), (26, 39), (45, 84), (26, 53), (37, 48), (48, 99), (15, 46), (36, 97), (14, 87), (42, 56), (37, 99), (5, 94), (71, 73), (0, 85), (70, 72), (22, 74), (37, 98)} 
+0

솔루션. 감사! – arshadic