2016-04-22 3 views
0

Я хочу найти соседей на расстоянии, используя Scipy cKDTree. Самое главное, я хочу сам пункт (нулевое расстояние). cKDTree. запрос дает все соседи, но без нулевого расстояния.Scipy cKDTree ближайший сосед, включая нулевые расстояния

Есть ли способ сделать это?

Благодаря

+0

Можете ли вы дать более подробную информацию о коде и как вы запрашиваете свое дерево? Я не уверен, что вижу вашу проблему. Если вы создадите дерево типа 'tree = cKDTree (ref_points)' и запросите его с чем-то вроде '_, idx = tree.query (other_points, k = 3)' '' idx 'variable будет содержать для каждой точки' other_points ' ', id из 3 ближайших в' ref_points', включая, если одна из этих индексированных точек имеет одинаковые координаты (то есть нулевое расстояние) запрашиваемой точки. – mgc

+0

Спасибо за ваш ответ. В списке [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] я хочу найти соседние точки [5] на расстоянии 2. cKDTree дает мне очки [3, 4, 6, 7]. Но я хочу [3, 4, 5, 6, 7]. Означает ли это мой вопрос? – RainisCold

ответ

0

Я не могу воспроизвести проблему (или может зависит от метода, который вы используете для запроса дерева).

Учитывая этот простой фрагмент кода:

>>> from scipy.spatial import cKDTree 
>>> import numpy as np 

>>> points_ref = np.array([(1, 1), (3, 3), (4, 4), (5, 4), (6, 6)]) 
>>> tree = cKDTree(points_ref) 

запрашивая ближайших соседей на расстоянии 2 вокруг точки (4, 4) с помощью метода cKDTree.query_ball_point может дать что-то вроде:

>>> idx = tree.query_ball_point((4, 4), 2) 
>>> points_ref[idx] 
# array([[3, 3], [4, 4], [5, 4]]) 

который возвращает точка на расстоянии 0.

Запрос на n- Ближайшие соседствует с методом cKDTree.query также, кажется, возвращает точку с расстояния 0:

>>> _, idx = tree.query((3, 3), k=2) 
>>> points_ref[idx] 
# array([[3, 3], [4, 4]]) 
+0

Большое вам спасибо, мгс. Я нашел свою ошибку. И да, это работает. – RainisCold