3D 공간에서 x, y, z 위치와 함께 5 백만 점의 카탈로그가 있다고 가정합니다. 이 5 백만 점 중 각각에 대해 가장 가까운 10 점 (직선적 인 3 차원 유클리드 거리 공식)을 찾고 싶습니다.5 백만개의 요소 카탈로그에있는 각 요소에 대한 3D 유클리드 공간에서 가장 가까운 10 개의 점 찾기
파이썬에서 테이블의 모든 요소에 대해 간단한 for 루프를 수행하고 for 루프 내에서 현재 작업 좌표와 다른 모든 점 사이의 거리를 찾는 배열 연산 (두 번째 루프가 아닙니다!)을 수행합니다. 카탈로그에서 이것은 일/주 걸릴 것입니다. 저는 정렬과 점 사이의 거리 계산에 관련된 몇 가지 작업을 시도했습니다. +/- 각 테이블 요소 둘레의 몇 천 개의 행이지만, 여전히 일 걸릴 것입니다.
파이썬에서이 작업을 수행하는 더 빠른 방법은 무엇입니까? for 루프를 일종의 벡터화 된 연산으로 변환 할 수있는 방법이 있습니까? 어떤 기계 학습 기술 (예 : scikit-learn)이 도움이 될까요? 아니면 어떻게 든 코드를 병렬 처리하는 데 도움이 될까요?
3d euclidian space는 10 개의 가장 가까운 이웃을 찾으려고하는데, [spatial partitioning] (https://en.wikipedia.org/wiki/Nearest_neighbor_search#Space_partitioning)을위한 훌륭한 후보자처럼 들리지만, kd- 나무, 정말 좋은 성능을 줄 수 있습니다! 'scikit-learn'은 kd-tree 구현을 이미 가지고 있습니다. 이 접근법에는 근사치 대신 * 정확한 *가 추가 된 보너스가 있습니다. –