count_neighbors#
- cKDTree.count_neighbors(self, other, r, p=2., weights=None, cumulative=True)#
计算可以形成的相邻对的数量。
计算可以形成的
(x1,x2)
对的数量,其中x1
来自self
,x2
来自other
,并且distance(x1, x2, p) <= r
。self
和other
上的数据点可以选择性地通过weights
参数进行加权。(见下文)这是根据 Gray 和 Moore [1] 描述的“两点相关性”算法改编而来。有关更深入的讨论,请参阅注释。
- 参数:
- othercKDTree 实例
要从中提取点的另一个树,可以与 self 相同。
- r浮点数或一维浮点数数组
要生成计数的半径。使用单次树遍历搜索多个半径。如果计数是非累积的 (
cumulative=False
),r
定义了 bin 的边缘,并且必须是非递减的。- p浮点数,可选
1<=p<=infinity。要使用的哪个 Minkowski p 范数。默认 2.0。如果可能发生溢出,有限的大 p 可能会导致 ValueError。
- weights元组、数组或 None,可选
如果为 None,则对计数不加权。如果以元组的形式给出,则 weights[0] 是
self
中点的权重,weights[1] 是other
中点的权重;两者都可以是 None 以表示点未加权。如果以数组的形式给出,则 weights 是self
和other
中点的权重。为了使这有意义,self
和other
必须是同一棵树。如果self
和other
是两棵不同的树,则会引发 ValueError。默认:None- cumulative布尔值,可选
返回的计数是否为累积的。当 cumulative 设置为
False
时,该算法经过优化,可以处理由r
指定的大量 bin (>10)。当cumulative
设置为 True 时,该算法经过优化,可以处理少量r
。默认:True
- 返回值:
- result标量或一维数组
对的数量。对于未加权的计数,结果为整数。对于加权计数,结果为浮点数。如果 cumulative 为 False,则
result[i]
包含具有(-inf if i == 0 else r[i-1]) < R <= r[i]
的计数
注释
对计数是用于从由对象位置组成的数据集中计算两点相关函数的基本操作。
两点相关函数测量对象的聚类,并广泛用于宇宙学中量化我们宇宙的大尺度结构,但它可能对其他领域的数据分析有用,在这些领域中也会发生对象的自相似组装。
Landy-Szalay 估计量用于测量
D
的两点相关函数。 [2]例如,给定两组对象的 position,
对象
D
(数据)包含聚类信号,并且对象
R
(随机)不包含任何信号,
\[\xi(r) = \frac{<D, D> - 2 f <D, R> + f^2<R, R>}{f^2<R, R>},\]其中括号表示在
r
(距离)周围的有限 bin 中计算两个数据集之间的对的数量,对应于设置 cumulative=False,并且f = float(len(D)) / float(len(R))
是数据和随机对象的数量之比。此处实现的算法松散地基于 [1] 中描述的双树算法。我们根据
cumulative
的设置在两种不同的对累积方案之间切换。当cumulative == False
时,我们使用的计算时间不随 bin 的总数而变化。当cumulative == True
时,该算法随 bin 的数量线性变化,尽管当仅使用 1 或 2 个 bin 时速度略快。 [5].作为对朴素对计数的扩展,加权对计数计算权重的乘积,而不是对的数量。加权对计数用于估计标记相关函数 ([3],第 2.2 节),或正确计算每个距离 bin 的平均数据(例如 [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,“Bias and variance of angular correlation functions”, The Astrophysical Journal, 1993, DOI:10.1086/172900
[3]Sheth, Connolly and Skibba,“Marked correlations in galaxy formation models”, 2005, arXiv:astro-ph/0511773
[4]Hawkins, et al., “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