scipy.spatial.cKDTree.count_neighbors

cKDTree.count_neighbors(self, other, r, p=2., weights=None, cumulative=True)

数一下附近可以形成多少对。

清点配对的数量 (x1,x2) 可以形成,具有 x1 绘图自 selfx2 绘图自 other ,以及在哪里 distance(x1, x2, p) <= r

数据点打开 selfother 可选地按 weights 论点。(见下文)

这是从Gray和Moore描述的“两点相关”算法改编而来的 [1]. 请参阅备注以进行进一步讨论。

参数
otherCKDTree实例

要从中绘制点的另一棵树可以是与Self相同的树。

r浮点数或一维数组的浮点数

要生成计数的半径。使用单个树遍历搜索多个半径。如果计数是非累积的 (cumulative=False ), r 定义存储箱的边缘,并且必须是非递减的。

p浮动,可选

1<=p<=无穷大。使用哪个Minkowski p-范数。默认为2.0。如果可能发生溢出,有限大的p可能会导致ValueError。

weightstuple、array_like或NONE,可选

如果没有,则配对计数未加权。如果作为元组给出,则权重 [0] 中的点的权重 self 、和权重 [1] 中的点的权重 other ;任一项都可以为None,以指示点未加权。如果以类似数组的形式给出,则权重是中的点的权重 selfother 。为了让这一切变得有意义, selfother 一定是同一棵树。如果 selfother 是两棵不同的树,一个 ValueError 都被养大了。默认值:无

cumulative布尔值,可选

返回的计数是否累计。当Cumulative设置为 False 对算法进行了优化,以处理由指定的大量条柱(>10 r 。什么时候 cumulative 设置为True,则该算法经过优化以与少量 r 。默认值:true

退货
result标量或一维阵列

配对的数量。对于未加权计数,结果为整数。对于加权计数,结果为浮点数。如果累积为假, result[i] 包含具有的计数 (-inf if i == 0 else r[i-1]) < R <= r[i]

注意事项

配对计数是从由物体位置组成的数据集中计算两点相关函数的基本操作。

两点关联函数测量物体的聚集性,在宇宙学中被广泛用来量化我们宇宙中的大尺度结构,但它也可以用于其他领域的数据分析,这些领域也发生了物体的自相似组装。

两点相关函数的Landy-Szalay估计 D 测量中的群集信号 D[2]

例如,给定两组对象的位置,

  • 对象 D (数据)包含聚类信号,以及

  • 对象 R (随机)不包含信号的,

\[\xi(R)=\frac{<D,D>-2 f<D,R>+f^2<R,R>}{f^2<R,R>},\]

其中括号表示周围的有限仓位中的两个数据集之间的计数对 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)

格雷和摩尔,“统计学习中的N-体问题”,“挖掘天空”,2000。 arXiv:astro-ph/0012333

2

Landy和Szalay,“角相关函数的偏差和方差”,天体物理杂志,1993, DOI:10.1086/172900

3

谢斯、康诺利和斯基巴,“星系形成模型中的显著相关性”,2005, arXiv:astro-ph/0511773

4

Hawkins等人的“2DF星系红移调查:宇宙的相关函数、特殊速度和物质密度”,皇家天文学会月刊,2002, DOI:10.1046/j.1365-2966.2003.07063.x

5

https://github.com/scipy/scipy/pull/5647#issuecomment-168474926

示例

您可以统计距离内两棵kd-tree之间的邻居数:

>>> 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