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 相同的樹。
- rfloat 或一維浮點數陣列
產生計數的半徑。多個半徑會使用單一樹狀結構遍歷進行搜尋。如果計數是非累積的(
cumulative=False
),則r
定義了 bin 的邊緣,且必須是非遞減的。- pfloat,可選
1<=p<=infinity。要使用的 Minkowski p-norm。預設值為 2.0。如果可能發生溢位,則有限大的 p 可能會導致 ValueError。
- weightstuple、類陣列或 None,可選
如果為 None,則配對計數為未加權的。如果給定為 tuple,則 weights[0] 是
self
中點的權重,而 weights[1] 是other
中點的權重;兩者都可以是 None,表示點未加權。如果給定為類陣列,則 weights 是self
和other
中點的權重。為了使其有意義,self
和other
必須是相同的樹。如果self
和other
是兩個不同的樹,則會引發ValueError
。預設值:None在 1.6.0 版本中新增。
- cumulativebool,可選
傳回的計數是否為累積的。當 cumulative 設定為
False
時,演算法會針對大量 bin(>10)進行最佳化,這些 bin 由r
指定。當cumulative
設定為 True 時,演算法會針對少量的r
進行最佳化。預設值:True在 1.6.0 版本中新增。
- 返回:
- result純量或一維陣列
配對的數量。對於未加權的計數,結果為整數。對於加權的計數,結果為浮點數。如果 cumulative 為 False,則
result[i]
包含(-inf if i == 0 else r[i-1]) < R <= r[i]
的計數
註解
配對計數是用於從由物件位置組成的資料集中計算雙點相關函數的基本操作。
雙點相關函數測量物件的集群程度,並廣泛用於宇宙學中,以量化我們宇宙中的大規模結構,但它可能適用於也發生物件自相似組裝的其他領域中的資料分析。
用於測量
D
中集群訊號的D
雙點相關函數的 Landy-Szalay 估計器。[2]例如,給定兩組物件的位置,
物件
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 節)。
[2]Landy 和 Szalay,“角度相關函數的偏差和變異數”,The Astrophysical Journal,1993 年,http://adsabs.harvard.edu/abs/1993ApJ…412…64L
[3]Sheth、Connolly 和 Skibba,“星系形成模型中的標記相關性”,Arxiv 電子預印本,2005 年,https://arxiv.org/abs/astro-ph/0511773
[4]Hawkins 等人,“2dF 星系紅移巡天:相關函數、特殊速度和宇宙的物質密度”,Monthly Notices of the Royal Astronomical Society,2002 年,http://adsabs.harvard.edu/abs/2003MNRAS.346…78H
範例
您可以計算兩個 kd 樹之間在一定距離內的鄰居數量
>>> 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