J'ai beaucoup de points dans le plan x,y
, avec une longueur d'environ 10000, chaque point (x,y)
a un rayon intrinsèque r
. Ce petit ensemble de données n'est qu'un petit coin de tout mon ensemble de données. J'ai un point intéressé (x1,y1)
, je veux trouver le point à proximité autour de (x1,y1)
dans les 1 et répondre aux critères que la distance entre (x,y)
et (x1,y1)
est inférieure à r
. Je veux retourner l'index de ces bons points, pas les bons points eux-mêmes.Trouver des voisins avec des coupes efficacement et retour 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]
Dans cette fonction, je peux trouver les bons points autour (x1,y1)
, mais pas l'indice de ces bons points. TOUTEFOIS, j'ai besoin de l'index ORIGINAL car l'index ORIGINAL est utilisé pour extraire d'autres données associées à la coordonnée (x,y)
. Comme je l'ai mentionné, l'échantillon de données n'est qu'un petit coin de mon ensemble de données, j'appellerai la fonction ci-dessus environ 1 000 000 fois pour l'ensemble de mes données, donc l'efficacité de la fonction index_finder
ci-dessus.
Des réflexions sur une telle tâche?
Comment utiliser 'index_finder' pour tous ces points? L'utilisez-vous dans une boucle ou juste comme ça? – Divakar
J'utiliserai cette fonction à l'intérieur d'une boucle Parce que j'ai beaucoup de points intéressants comme '(x1, y1)'. Cette fonction elle-même peut éviter toute boucle. Et cet ensemble de données est seulement 1/1000 de mon ensemble de données. –