Я использовал scipy.spatial
раньше, и это кажется хорошим улучшением (особенно в отношении интерфейса) по сравнению с scikits.ann
.
В этом случае я думаю, что вы спутали возврат с вашегоtree.query(...)
звонок.Из scipy.spatial.KDTree.query
документов :
Returns
-------
d : array of floats
The distances to the nearest neighbors.
If x has shape tuple+(self.m,), then d has shape tuple if
k is one, or tuple+(k,) if k is larger than one. Missing
neighbors are indicated with infinite distances. If k is None,
then d is an object array of shape tuple, containing lists
of distances. In either case the hits are sorted by distance
(nearest first).
i : array of integers
The locations of the neighbors in self.data. i is the same
shape as d.
Так что в этом случае при запросе ближайшего к [1,1]
вы получаете:
distance to nearest: 0.0
index of nearest in original array: 0
Thisозначает, что [1,1]
- это первая строка ваших исходных данных в array
, которая ожидается, если ваши данные равны y = x on the range [1,50]
.
Функция scipy.spatial.KDTree.query
имеет множество других параметров, так что, например, еслиВы хотели убедиться, что ближайший сосед, который сам не является, попытается:
tree.query([1,1], k=2)
Это вернет двух ближайших соседей, которые вы могли бы применить к более логичной ситуациигде возвращаемое расстояние равно нулю (т. е. запрашиваемая точка является одним из элементов данных, используемых для построения дерева), выбирается второй ближайший сосед, а не первый.