KDTree возвратные расстояния во всех измерениях - PullRequest
0 голосов
/ 28 января 2019

Использование scipy.spatial.KDTree() в Python возвращает два массива: 1. Расстояние до ближайшей точки в списке векторов, 2. Индекс ближайшего вектора в списке.

Однако возвращаемые расстояния - это евклидовы расстояния.Есть ли способ вернуть отдельные компоненты, которые дают евклидово расстояние?

Например:

import numpy as np
from scipy import spatial

a = np.round(np.random.uniform(0,10,(4,2)))

a
Out[171]: 
array([[2., 8.],
       [8., 1.],
       [6., 9.],
       [3., 6.]])

f_test = np.array([8.,1.1])

tree = spatial.KDTree(a)
distances, indices = tree.query(f_test)

distances
Out[169]: 0.10000000000000009

indices
Out[170]: 1

Здесь вывод distances, который я хотел бы, равен [0.,0.1], то есть расстояниеот f_test до ближайшего вектора в a, но поэлементно.

ПРИМЕЧАНИЕ. Это простой пример, в котором я сравнил только один вектор с двумерным массивом векторов, но в действительности я хотел бы вернуть минимальные полновекторные расстояния нового f_test (который является2D массив тестовых векторов) к исходному массиву a.В противном случае это была бы простая проблема поиска наименьшего компонента после вычитания f_test из a.

напр.if:

f_test = np.array([[8.,1.1],[6.,9.2]])

Тогда я хотел бы вернуть distances как np.array([[0.,0.1],[0.,0.2]])

KDTree, что позволяет быстро вычислять минимальные расстояния для массива векторов без зацикливания, поэтому почемуЯ использую это в качестве примера здесь.

Ссылка на KDTree документы: https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.html

...