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, wobeix1ausselfundx2ausothergezogen wird und wobeidistance(x1, x2, p) <= rgilt.Datenpunkte in
selfundotherwerden optional durch das Argumentweightsgewichtet. (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
selfsein.- 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), definiertrdie 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
selfund weights[1] die Gewichte der Punkte inother; eines davon kann None sein, um anzuzeigen, dass die Punkte ungewichtetet sind. Wenn als array_like angegeben, sind weights die Gewichte der Punkte inselfundother. Damit dies sinnvoll ist, müssenselfundotherderselbe Baum sein. Wennselfundotherzwei verschiedene Bäume sind, wird einValueErrorausgelöst. Standard: NoneHinzugefügt in Version 1.6.0.
- cumulativebool, optional
Ob die zurückgegebenen Zählungen kumulativ sind. Wenn cumulative auf
Falsegesetzt ist, ist der Algorithmus für die Arbeit mit einer großen Anzahl von Bins (>10) optimiert, die vonrspezifiziert werden. Wenncumulativeauf True gesetzt ist, ist der Algorithmus für die Arbeit mit einer kleinen Anzahl vonroptimiert. Standard: TrueHinzugefü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
Dmisst das Gruppierungssignal inD. [2]Gegeben seien beispielsweise die Positionen zweier Objektmengen,
Objekte
D(Daten) enthalten das Gruppierungssignal undObjekte
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, undf = 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, wenncumulative == Falseist, skaliert nicht mit der Gesamtzahl der Bins. Der Algorithmus fürcumulative == Trueskaliert 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_treeberechnet wird.>>> indexes = kd_tree1.query_ball_tree(kd_tree2, r=0.2) >>> sum([len(i) for i in indexes]) 1