Я не могу воспроизвести проблему (или может зависит от метода, который вы используете для запроса дерева).
Учитывая этот простой фрагмент кода:
>>> 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]])
Можете ли вы дать более подробную информацию о коде и как вы запрашиваете свое дерево? Я не уверен, что вижу вашу проблему. Если вы создадите дерево типа 'tree = cKDTree (ref_points)' и запросите его с чем-то вроде '_, idx = tree.query (other_points, k = 3)' '' idx 'variable будет содержать для каждой точки' other_points ' ', id из 3 ближайших в' ref_points', включая, если одна из этих индексированных точек имеет одинаковые координаты (то есть нулевое расстояние) запрашиваемой точки. – mgc
Спасибо за ваш ответ. В списке [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] я хочу найти соседние точки [5] на расстоянии 2. cKDTree дает мне очки [3, 4, 6, 7]. Но я хочу [3, 4, 5, 6, 7]. Означает ли это мой вопрос? – RainisCold