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<=infinity。要使用的 Minkowski p-範數。預設值為 2.0。有限大的 p 值可能會在發生溢位時導致 ValueError。

weights元組、類陣列或 None,選填

如果為 None,則配對計數為未加權。如果以元組形式給定,則 weights[0] 是 self 中點的權重,而 weights[1] 是 other 中點的權重;兩者都可以是 None,表示點未加權。如果以類陣列形式給定,則 weights 是 selfother 中點的權重。為了使這有意義,selfother 必須是相同的樹。如果 selfother 是兩個不同的樹,則會引發 ValueError。預設值:None

cumulative布林值,選填

傳回的計數是否為累積的。當 cumulative 設定為 False 時,演算法會最佳化以處理大量由 r 指定的箱子 (>10)。當 cumulative 設定為 True 時,演算法會最佳化以處理少量的 r。預設值:True

回傳值:
result純量或一維陣列

配對的數量。對於未加權的計數,結果為整數。對於加權的計數,結果為浮點數。如果 cumulative 為 False,則 result[i] 包含 (-inf if i == 0 else r[i-1]) < R <= r[i] 的計數

註釋

配對計數是用於從由物件位置組成的資料集中計算兩點相關函數的基本操作。

兩點相關函數測量物件的群聚程度,並廣泛用於宇宙學中,以量化我們宇宙中的大規模結構,但它也可能適用於其他領域的資料分析,在這些領域中也會發生物件的自相似組裝。

用於 D 的兩點相關函數的 Landy-Szalay 估計器測量 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)

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