scipy.spatial.KDTree.

count_neighbors#

KDTree.count_neighbors(other, r, p=2.0, weights=None, cumulative=True)[原始碼]#

計算可以形成多少鄰近的配對。

計算可以形成的配對 (x1,x2) 數量,其中 x1self 提取,而 x2other 提取,且 distance(x1, x2, p) <= r

selfother 上的資料點可以選擇性地透過 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 是 selfother 中點的權重。為了使其有意義,selfother 必須是相同的樹。如果 selfother 是兩個不同的樹,則會引發 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 節)。

[1] (1,2)

Gray 和 Moore,“統計學習中的 N 體問題”,Mining the sky,2000 年,https://arxiv.org/abs/astro-ph/0012333

[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