當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python SciPy KDTree.count_neighbors用法及代碼示例


本文簡要介紹 python 語言中 scipy.spatial.KDTree.count_neighbors 的用法。

用法:

KDTree.count_neighbors(other, r, p=2.0, weights=None, cumulative=True)#

計算附近可以形成多少對。

計算可以形成的對數 (x1,x2) ,其中 x1 來自 selfx2 來自 other ,其中 distance(x1, x2, p) <= r

selfother 上的數據點可選地由 weights 參數加權。 (見下文)

這改編自 Gray 和 Moore [1] 說明的“two-pointcorrelation”算法。請參閱注釋以進行進一步討論。

參數

other KD樹

要從中繪製點的另一棵樹可以是與自身相同的樹。

r 浮點數或一維浮點數數組

產生計數的半徑。使用單個樹遍曆搜索多個半徑。如果計數是非累積的(cumulative=False),r 定義 bin 的邊,並且必須是非遞減的。

p 浮點數,可選

1<=p<=無窮大。使用哪個 Minkowski p-norm。默認 2.0。如果可能發生溢出,有限的大 p 可能會導致 ValueError。

weights tuple、數組 或 None,可選

如果沒有,pair-counting 未加權。如果作為元組給出, weights[0] 是 self 中點的權重,而 weights[1] 是 other 中點的權重;任何一個都可以是 None 表示這些點是未加權的。如果作為 數組 給出,權重是 selfother 中點的權重。為此,selfother 必須是同一棵樹。如果 selfother 是兩棵不同的樹,則會引發 ValueError。默認值:無

cumulative 布爾型,可選

返回的計數是否是累積的。當累積設置為 False 時,該算法經過優化以使用 r 指定的大量 bin (>10)。當 cumulative 設置為 True 時,算法經過優化以使用少量 r 。默認值:真

返回

result 標量或一維數組

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

注意

Pair-counting是用於從由對象位置組成的數據集中計算兩點相關函數的基本操作。

兩點相關函數測量物體的聚類,並廣泛應用於宇宙學中,以量化宇宙中的大尺度結構,但它對於也發生物體自相似組裝的其他領域的數據分析可能很有用。

D 的兩點相關函數的 Landy-Szalay 估計器測量 D 中的聚類信號。 [2]

例如,給定兩組對象的位置,

  • objects D (data) 包含聚類信號,並且

  • 不包含信號的對象R(隨機),

其中括號表示周圍有限箱中兩個數據集之間的計數對r(距離),對應設置累積=假, 和f = float(len(D)) / float(len(R))是來自數據的對象數與隨機數之間的比率。

這裏實現的算法大致基於[1]中說明的dual-tree算法。我們根據 cumulative 的設置在兩種不同的 pair-cumulation 方案之間切換。我們在 cumulative == False 時使用的方法的計算時間不隨 bin 總數變化。 cumulative == True 的算法與 bin 數量成線性比例,但僅使用 1 或 2 個 bin 時速度稍快。 [5]。

作為樸素pair-counting的擴展,加權pair-counting計算權重的乘積而不是對數。加權pair-counting 用於估計標記的相關函數([3],第 2.2 節),或正確計算每個距離箱的數據平均值(例如,[4],第 2.1 節關於紅移)。

[1] (1,2)

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

[2]

Landy 和 Szalay,“角度相關函數的偏差和方差”,《天體物理學雜誌》,1993,http://adsabs.harvard.edu/abs/1993ApJ…412…64L

[3]

Sheth、Connolly 和 Skibba,“星係形成模型中的顯著相關性”,Arxiv e-print,2005,https://arxiv.org/abs/astro-ph/0511773

[4]

Hawkins 等人,“2dF 星係紅移調查:相關函數、奇特速度和宇宙物質密度”,皇家天文學會月刊,2002 年,http://adsabs.harvard.edu/abs/2003MNRAS.346…78H

例子

您可以計算距離內兩個kd-trees 之間的鄰居數:

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

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.spatial.KDTree.count_neighbors。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。