scipy.spatial.cKDTree.

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 являются двумя разными деревьями, a ValueError возникает. По умолчанию: 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