scipy.spatial.KDTree.count_neighbors¶
- KDTree.count_neighbors(other, r, p=2.0, weights=None, cumulative=True)[源代码]¶
数一下附近可以形成多少对。
清点配对的数量
(x1,x2)
可以形成,具有x1
绘图自self
和x2
绘图自other
,以及在哪里distance(x1, x2, p) <= r
。数据点打开
self
和other
可选地按weights
论点。(见下文)这是从Gray和Moore描述的“两点相关”算法改编而来的 [1]. 请参阅备注以进行进一步讨论。
- 参数
- otherKDTree
要从中绘制点的另一棵树可以是与Self相同的树。
- r浮点数或一维数组的浮点数
要生成计数的半径。使用单个树遍历搜索多个半径。如果计数是非累积的 (
cumulative=False
),r
定义存储箱的边缘,并且必须是非递减的。- p浮动,可选
1<=p<=无穷大。使用哪个Minkowski p-范数。默认为2.0。如果可能发生溢出,有限大的p可能会导致ValueError。
- weightstuple、array_like或NONE,可选
如果没有,则配对计数未加权。如果作为元组给出,则权重 [0] 中的点的权重
self
、和权重 [1] 中的点的权重other
;任一项都可以为None,以指示点未加权。如果以类似数组的形式给出,则权重是中的点的权重self
和other
。为了让这一切变得有意义,self
和other
一定是同一棵树。如果self
和other
是两棵不同的树,一个ValueError
都被养大了。默认值:无1.6.0 新版功能.
- cumulative布尔值,可选
返回的计数是否累计。当Cumulative设置为
False
对算法进行了优化,以处理由指定的大量条柱(>10r
。什么时候cumulative
设置为True,则该算法经过优化以与少量r
。默认值:true1.6.0 新版功能.
- 退货
- 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年,https://arxiv.org/abs/astro-ph/0012333。
- 2
兰迪和沙雷,“角相关函数的偏差和方差”,天体物理杂志,1993年,http://adsabs.harvard.edu/abs/1993ApJ.412.64L
- 3
谢斯、康诺利和斯基巴,“星系形成模型中的显著相关性”,Arxiv e-print,2005年,https://arxiv.org/abs/astro-ph/0511773。
- 4
霍金斯等人,“2DF星系红移调查:相关函数、特殊速度和宇宙的物质密度”,“皇家天文学会月刊”,2002年,http://adsabs.harvard.edu/abs/2003MNRAS.346.78H。
- 5
https://github.com/scipy/scipy/pull/5647#issuecomment-168474926
示例
您可以统计距离内两棵kd-tree之间的邻居数:
>>> import numpy as np >>> from scipy.spatial import KDTree >>> rng = np.random.default_rng() >>> points1 = rng.random((5, 2)) >>> points2 = rng.random((5, 2)) >>> kd_tree1 = KDTree(points1) >>> kd_tree2 = KDTree(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