count_neighbors#
- cKDTree.count_neighbors(self, other, r, p=2., веса=None, кумулятивный=True)#
Подсчитать, сколько пар можно образовать из близлежащих элементов.
Подсчитать количество пар
(x1,x2)может быть сформирована, сx1взятые изselfиx2взятые изother, и гдеdistance(x1, x2, p) <= r.Точки данных на
selfиotherопционально взвешиваются с помощьюweightsаргумент. (См. ниже)Это адаптировано из алгоритма «двухточечной корреляции», описанного Греем и Муром [1]. См. примечания для дальнейшего обсуждения.
- Параметры:
- otherэкземпляр cKDTree
Другое дерево для выборки точек, может быть тем же деревом, что и self.
- rfloat или одномерный массив floats
Радиус для подсчета. Несколько радиусов обрабатываются за один обход дерева. Если подсчет не является кумулятивным (
cumulative=False),rопределяет границы бинов и должен быть неубывающим.- pfloat, опционально
1<=p<=бесконечность. Какую норму Минковского p использовать. По умолчанию 2.0. Конечное большое p может вызвать ValueError, если может произойти переполнение.
- весаtuple, array_like или None, опционально
Если None, подсчет пар не взвешен. Если задан как кортеж, weights[0] — это веса точек в
self, и weights[1] — это веса точек вother; любой может быть None, чтобы указать, что точки не взвешены. Если задан как array_like, weights — это веса точек вselfиother. Чтобы это имело смысл,selfиotherдолжно быть тем же деревом. Еслиselfиotherявляются двумя разными деревьями, aValueErrorвозникает. По умолчанию: None- кумулятивныйbool, необязательно
Являются ли возвращаемые счетчики кумулятивными. Когда cumulative установлен в
Falseалгоритм оптимизирован для работы с большим количеством бинов (>10), заданных параметромr. Когдаcumulativeустановлено в True, алгоритм оптимизирован для работы с небольшим количествомr. По умолчанию: True
- Возвращает:
- результатскаляр или 1-D массив
Количество пар. Для невзвешенных подсчетов результат целочисленный. Для взвешенных подсчетов результат вещественный. Если cumulative равно False,
result[i]содержит подсчёты с(-inf if i == 0 else r[i-1]) < R <= r[i]
Примечания
Подсчёт пар — базовая операция, используемая для вычисления двухточечных корреляционных функций из набора данных, состоящего из позиций объектов.
Двухточечная корреляционная функция измеряет кластеризацию объектов и широко используется в космологии для количественной оценки крупномасштабной структуры во Вселенной, но может быть полезна для анализа данных в других областях, где также происходит самоподобное объединение объектов.
Оценка Лэнди-Салая для двухточечной корреляционной функции
Dизмеряет сигнал кластеризации вD. [2]Например, учитывая положение двух наборов объектов,
объекты
D(data) содержит сигнал кластеризации, иобъекты
R(случайный), который не содержит сигнала,
\[\xi(r) = \frac{- 2 f + f^2 }{f^2 },\] #21320
r(расстояние), соответствующее установкеcumulative=False, иf = float(len(D)) / float(len(R))является отношением между количеством объектов из данных и случайных.Алгоритм, реализованный здесь, вольно основан на алгоритме двойного дерева, описанном в [1]. Мы переключаемся между двумя различными схемами парного накопления в зависимости от настройки
cumulative. Время вычисления метода, который мы используем, когда дляcumulative == Falseне масштабируется с общим количеством бинов. Алгоритм дляcumulative == Trueлинейно масштабируется с количеством бинов, хотя он немного быстрее, когда используется только 1 или 2 бина. [5].Как расширение наивного подсчета пар, взвешенный подсчет пар считает произведение весов вместо количества пар. Взвешенный подсчет пар используется для оценки маркированных корреляционных функций ([3], раздел 2.2), или для правильного вычисления среднего значения данных на каждый бина расстояния (например, [4], раздел 2.1 о красном смещении).
[1] (1,2)Gray and Moore, “N-body problems in statistical learning”, Mining the sky, 2000, arXiv:astro-ph/0012333
[2]Landy and Szalay, «Смещение и дисперсия угловых корреляционных функций», The Astrophysical Journal, 1993, DOI:10.1086/172900
[3]Sheth, Connolly и Skibba, «Marked correlations in galaxy formation models», 2005, arXiv:astro-ph/0511773
[4]Хокинс и др., «The 2dF Galaxy Redshift Survey: correlation functions, peculiar velocities and the matter density of the Universe», Monthly Notices of the Royal Astronomical Society, 2002, DOI:10.1046/j.1365-2966.2003.07063.x
Примеры
Вы можете подсчитать количество соседей между двумя kd-деревьями в пределах расстояния:
>>> import numpy as np >>> from scipy.spatial import cKDTree >>> rng = np.random.default_rng() >>> points1 = rng.random((5, 2)) >>> points2 = rng.random((5, 2)) >>> kd_tree1 = cKDTree(points1) >>> kd_tree2 = cKDTree(points2) >>> kd_tree1.count_neighbors(kd_tree2, 0.2) 1
Это число совпадает с общим количеством пар, вычисленным по
query_ball_tree:>>> indexes = kd_tree1.query_ball_tree(kd_tree2, r=0.2) >>> sum([len(i) for i in indexes]) 1