Использование 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