Ich habe viele Punkte in der x,y
Ebene, mit der Länge um 10000, hat jeder Punkt (x,y)
einen Eigenradius r
. Dieser kleine Datensatz ist nur eine winzige Ecke meines gesamten Datensatzes. Ich habe einen interessiert Punkt (x1,y1)
, Ich möchte in der Nähe von Punkt (x1,y1)
innerhalb 1 finden und erfüllen die Kriterien, dass der Abstand zwischen (x,y)
und (x1,y1)
ist weniger als r
. Ich möchte den Index dieser guten Punkte zurückgeben, nicht die guten Punkte selbst.Finden Nachbarn mit Schnitten effizient und Index
import numpy as np
np.random.seed(2000)
x = 20.*np.random.rand(10000)
y = 20.*np.random.rand(10000)
r = 0.3*np.random.rand(10000)
x1 = 10. ### (x1,y1) is an interest point
y1 = 12.
def index_finder(x,y,r,x1,y1):
idx = (abs(x - x1) < 1.) & (abs(y - y1) < 1.) ### This cut will probably cut 90% of the data
x_temp = x[idx] ### but if I do like this, then I lose the track of the original index
y_temp = y[idx]
dis_square = (x_temp - x1)*(x_temp - x1) + (y_temp - y1)*(y_temp - y1)
idx1 = dis_square < r*r ### after this cut, there are only a few left
x_good = x_temp[idx1]
y_good = y_temp[idx1]
In dieser Funktion kann ich die guten Punkte um (x1,y1)
, finden aber nicht den Index dieser guten Punkte. JEDOCH brauche ich den ORIGINAL-Index, weil der ORIGINAL-Index verwendet wird, um andere Daten zu extrahieren, die der Koordinate (x,y)
zugeordnet sind. Wie ich bereits erwähnt habe, ist der Beispieldatensatz nur eine winzige Ecke meines gesamten Datensatzes. Ich werde die obige Funktion etwa 1.000.000 Mal für meinen gesamten Datensatz aufrufen, daher ist auch die Effizienz der obigen index_finder
Funktion eine Überlegung.
Irgendwelche Gedanken zu einer solchen Aufgabe?
Wie benutzt man 'index_finder' für all diese Punkte? Verwenden Sie es in einer Schleife oder einfach so? – Divakar
Ich werde diese Funktion innerhalb einer Schleife verwenden, weil ich viele solche interessierende Punkte wie '(x1, y1)' habe. Diese Funktion selbst kann jede Schleife vermeiden. Und dieser Datensatz ist nur 1/1000 meines gesamten Datensatzes. –