scipy.spatial.KDTree.

count_neighbors#

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

Zählt, wie viele nahegelegene Paare gebildet werden können.

Zählt die Anzahl der Paare (x1,x2), die gebildet werden können, wobei x1 aus self und x2 aus other gezogen wird und wobei distance(x1, x2, p) <= r gilt.

Datenpunkte in self und other werden optional durch das Argument weights gewichtet. (Siehe unten)

Dies ist angepasst vom „Two-Point Correlation“-Algorithmus, der von Gray und Moore beschrieben wird [1]. Siehe Hinweise für weitere Diskussion.

Parameter:
otherKDTree

Der andere Baum, aus dem Punkte gezogen werden sollen, kann derselbe Baum wie self sein.

rfloat oder eindimensionale Liste von Floats

Der Radius, für den eine Zählung durchgeführt werden soll. Mehrere Radien werden mit einem einzigen Baumtraversaldurchlauf durchsucht. Wenn die Zählung nicht kumulativ ist (cumulative=False), definiert r die Ränder der Bins und muss nicht abnehmend sein.

pfloat, optional

1<=p<=infinity. Welche Minkowski-p-Norm verwendet werden soll. Standard ist 2.0. Ein endlich großer p kann einen ValueError verursachen, wenn es zu einem Überlauf kommen kann.

weightstuple, array_like oder None, optional

Wenn None, ist die Paarzählung ungewichtetet. Wenn als Tupel angegeben, sind weights[0] die Gewichte der Punkte in self und weights[1] die Gewichte der Punkte in other; eines davon kann None sein, um anzuzeigen, dass die Punkte ungewichtetet sind. Wenn als array_like angegeben, sind weights die Gewichte der Punkte in self und other. Damit dies sinnvoll ist, müssen self und other derselbe Baum sein. Wenn self und other zwei verschiedene Bäume sind, wird ein ValueError ausgelöst. Standard: None

Hinzugefügt in Version 1.6.0.

cumulativebool, optional

Ob die zurückgegebenen Zählungen kumulativ sind. Wenn cumulative auf False gesetzt ist, ist der Algorithmus für die Arbeit mit einer großen Anzahl von Bins (>10) optimiert, die von r spezifiziert werden. Wenn cumulative auf True gesetzt ist, ist der Algorithmus für die Arbeit mit einer kleinen Anzahl von r optimiert. Standard: True

Hinzugefügt in Version 1.6.0.

Rückgabe:
resultSkalar oder 1D-Array

Die Anzahl der Paare. Für ungewichtete Zählungen ist das Ergebnis eine Ganzzahl. Für gewichtete Zählungen ist das Ergebnis eine Fließkommazahl. Wenn cumulative False ist, enthält result[i] die Zählungen mit (-inf wenn i == 0 sonst r[i-1]) < R <= r[i]

Hinweise

Die Paarzählung ist die grundlegende Operation, die zur Berechnung von Zweipunkt-Korrelationsfunktionen aus einem Datensatz verwendet wird, der aus den Positionen von Objekten besteht.

Die Zweipunkt-Korrelationsfunktion misst die Gruppierung von Objekten und wird in der Kosmologie weit verbreitet verwendet, um die großräumige Struktur in unserem Universum zu quantifizieren. Sie kann jedoch auch für die Datenanalyse in anderen Bereichen nützlich sein, in denen eine selbstähnliche Anordnung von Objekten ebenfalls auftritt.

Der Landy-Szalay-Schätzer für die Zweipunkt-Korrelationsfunktion von D misst das Gruppierungssignal in D. [2]

Gegeben seien beispielsweise die Positionen zweier Objektmengen,

  • Objekte D (Daten) enthalten das Gruppierungssignal und

  • Objekte R (zufällig), die kein Signal enthalten,

\[\xi(r) = \frac{<D, D> - 2 f <D, R> + f^2<R, R>}{f^2<R, R>},\]

wobei die Klammern die Zählung von Paaren zwischen zwei Datensätzen in einem endlichen Bin um r (Abstand) darstellen, was dem Setzen von cumulative=False entspricht, und f = float(len(D)) / float(len(R)) das Verhältnis zwischen der Anzahl der Objekte aus Daten und zufälligen Daten ist.

Der hier implementierte Algorithmus basiert lose auf dem Dual-Tree-Algorithmus, der in [1] beschrieben wird. Wir wechseln zwischen zwei verschiedenen Paar-Kumulationsschemata, abhängig von der Einstellung von cumulative. Die Rechenzeit der Methode, die wir verwenden, wenn cumulative == False ist, skaliert nicht mit der Gesamtzahl der Bins. Der Algorithmus für cumulative == True skaliert linear mit der Anzahl der Bins, ist aber geringfügig schneller, wenn nur 1 oder 2 Bins verwendet werden. [5].

Als Erweiterung der naiven Paarzählung zählt die gewichtete Paarzählung das Produkt der Gewichte anstelle der Anzahl der Paare. Die gewichtete Paarzählung wird verwendet, um markierte Korrelationsfunktionen zu schätzen ([3], Abschnitt 2.2) oder um den Durchschnitt der Daten pro Distanz-Bin korrekt zu berechnen (z. B. [4], Abschnitt 2.1 zur Rotverschiebung).

[1] (1,2)

Gray und Moore, „N-body problems in statistical learning“, Mining the sky, 2000, https://arxiv.org/abs/astro-ph/0012333

[2]

Landy und Szalay, „Bias and variance of angular correlation functions“, The Astrophysical Journal, 1993, http://adsabs.harvard.edu/abs/1993ApJ…412…64L

[3]

Sheth, Connolly und Skibba, „Marked correlations in galaxy formation models“, Arxiv e-print, 2005, https://arxiv.org/abs/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, http://adsabs.harvard.edu/abs/2003MNRAS.346…78H

Beispiele

Sie können die Anzahl der Nachbarn zwischen zwei KD-Trees innerhalb eines bestimmten Abstands zählen.

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

Diese Anzahl ist dieselbe wie die Gesamtzahl der Paare, die von query_ball_tree berechnet wird.

>>> indexes = kd_tree1.query_ball_tree(kd_tree2, r=0.2)
>>> sum([len(i) for i in indexes])
1