запрос#
- cKDTree.запрос(self, x, k=1, eps=0, p=2, distance_upper_bound=np.inf, workers=1)#
Запрос kd-дерева на ближайших соседей
- Параметры:
- xarray_like, последнее измерение self.m
Массив точек для запроса.
- kсписок целых чисел или целое число
Список k-х ближайших соседей для возврата. Если k - целое число, оно обрабатывается как список [1, … k] (range(1, k+1)). Обратите внимание, что отсчет начинается с 1.
- epsнеотрицательное число с плавающей точкой
Возвращает приближенных ближайших соседей; k-е возвращаемое значение гарантированно не дальше, чем (1+eps) раз расстояние до реального k-го ближайшего соседа.
- pfloat, 1<=p<=infinity
Какую Minkowski p-норму использовать. 1 - это расстояние «Манхэттен» (сумма абсолютных значений) 2 - обычное евклидово расстояние бесконечность - расстояние максимальной разности координат Конечное большое p может вызвать ValueError при возможном переполнении.
- distance_upper_boundнеотрицательное число с плавающей точкой
Возвращать только соседей в пределах этого расстояния. Это используется для обрезки поиска по дереву, поэтому если вы выполняете серию запросов ближайших соседей, может помочь указать расстояние до ближайшего соседа последней точки.
- workersint, необязательный
Количество рабочих процессов для параллельной обработки. Если задано -1, используются все потоки CPU. По умолчанию: 1.
Изменено в версии 1.9.0: Аргумент "n_jobs" был переименован в "workers". Старое имя "n_jobs" было объявлено устаревшим в SciPy 1.6.0 и удалено в SciPy 1.9.0.
- Возвращает:
- dмассив чисел с плавающей точкой
Расстояния до ближайших соседей. Если
xимеет формуtuple+(self.m,), затемdимеет формуtuple+(k,). Когда k == 1, последнее измерение вывода сжимается. Отсутствующие соседи обозначаются бесконечными расстояниями.- indarray целых чисел
Индекс каждого соседа в
self.data. Еслиxимеет формуtuple+(self.m,), затемiимеет формуtuple+(k,). Когда k == 1, последнее измерение вывода сжимается. Отсутствующие соседи обозначаютсяself.n.
Примечания
Если KD-дерево периодическое, позиция
xзаключен в рамку.Когда входной параметр k является списком, выполняется запрос для arange(max(k)), но сохраняются только столбцы, хранящие запрошенные значения k. Это реализовано таким образом, чтобы уменьшить использование памяти.
Примеры
>>> import numpy as np >>> from scipy.spatial import cKDTree >>> x, y = np.mgrid[0:5, 2:8] >>> tree = cKDTree(np.c_[x.ravel(), y.ravel()])
Для запроса ближайших соседей и возврата сжатого результата используйте
>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=1) >>> print(dd, ii, sep='\n') [2. 0.2236068] [ 0 13]
Для запроса ближайших соседей и возврата несжатого результата используйте
>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[1]) >>> print(dd, ii, sep='\n') [[2. ] [0.2236068]] [[ 0] [13]]
Чтобы запросить вторых ближайших соседей и вернуть несжатый результат, используйте
>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[2]) >>> print(dd, ii, sep='\n') [[2.23606798] [0.80622577]] [[ 6] [19]]
Для запроса первого и второго ближайших соседей используйте
>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=2) >>> print(dd, ii, sep='\n') [[2. 2.23606798] [0.2236068 0.80622577]] [[ 0 6] [13 19]]
или, будьте более конкретны
>>> dd, ii = tree.query([[0, 0], [2.2, 2.9]], k=[1, 2]) >>> print(dd, ii, sep='\n') [[2. 2.23606798] [0.2236068 0.80622577]] [[ 0 6] [13 19]]