count_neighbors#
- cKDTree.count_neighbors(self, other, r, p=2., weights=None, cumulative=True)#
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) <= r.Datenpunkte auf
selfundotherwerden optional durch das Argumentweightsgewichtet. (Siehe unten)Dies ist aus dem von Gray und Moore beschriebenen "Zwei-Punkte-Korrelations"-Algorithmus adaptiert [1]. Siehe Hinweise für weitere Diskussion.
- Parameter:
- othercKDTree-Instanz
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 erfolgen soll. Mehrere Radien werden mit einem einzigen Baumtraversaldurchlauf gesucht. 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. Standardmäßig 2.0. Ein endliches, großes p kann einen ValueError verursachen, wenn ein Überlauf auftreten kann.
- weightsTupel, array_like oder None, optional
Wenn None, ist die Paarzählung ungewichtigt. Wenn als Tupel gegeben, 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 ungewichtigt sind. Wenn als array_like gegeben, sind weights die Gewichte der Punkte inselfundother. Damit dies Sinn ergibt, müssenselfundotherderselbe Baum sein. Wennselfundotherzwei verschiedene Bäume sind, wird einValueErrorausgelöst. Standard: None- cumulativebool, optional
Ob die zurückgegebenen Zählungen kumulativ sind. Wenn
cumulativeaufFalsegesetzt ist, ist der Algorithmus für die Arbeit mit einer großen Anzahl von Bins (>10), die vonrangegeben werden, optimiert. Wenncumulativeauf True gesetzt ist, ist der Algorithmus für die Arbeit mit einer kleinen Anzahl vonroptimiert. Standard: True
- Rückgabe:
- resultSkalar oder 1D-Array
Die Anzahl der Paare. Bei ungewichteten Zählungen ist das Ergebnis eine Ganzzahl. Bei gewichteten Zählungen ist das Ergebnis ein Float. Wenn
cumulativeFalse ist, enthältresult[i]die Zählungen mit(-inf wenn i == 0 sonst r[i-1]) < R <= r[i]
Hinweise
Paarzählung ist die grundlegende Operation, die zur Berechnung der Zwei-Punkte-Korrelationsfunktionen aus einem Datensatz besteht, der aus den Positionen von Objekten zusammengesetzt ist.
Die Zwei-Punkte-Korrelationsfunktion misst die Gruppierung von Objekten und wird in der Kosmologie häufig 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 auftritt.
Der Landy-Szalay-Schätzer für die Zwei-Punkte-Korrelationsfunktion von
Dmisst das Gruppierungssignal inD. [2]Zum Beispiel, gegeben die Position von zwei Objektmengen,
Objekte
D(Daten) enthalten das Gruppierungssignal, undObjekte
R(zufällig) enthalten kein Signal,
\[\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 voncumulative=Falseentspricht, undf = float(len(D)) / float(len(R))das Verhältnis zwischen der Anzahl der Objekte aus den Daten und den zufälligen Objekten ist.Der hier implementierte Algorithmus basiert lose auf dem Dual-Tree-Algorithmus, der in [1] beschrieben ist. 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, obwohl er etwas schneller ist, 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. Gewichtete Paarzählung wird verwendet, um markierte Korrelationsfunktionen abzuschätzen ([3], Abschnitt 2.2) oder um den Durchschnitt der Daten pro Abstandsbins 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, arXiv:astro-ph/0012333
[2]Landy und Szalay, „Bias and variance of angular correlation functions“, The Astrophysical Journal, 1993, DOI:10.1086/172900
[3]Sheth, Connolly und 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
Beispiele
Sie können die Anzahl der Nachbarn zwischen zwei kd-Bäumen innerhalb eines bestimmten Abstands zählen.
>>> 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
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