J'ai un code pour séquentiellement si chaque paire de coordonnées cartésiennes trouvées dans mon DataFrame
tombe dans certaines zones fermées géométriques. Mais c'est plutôt lent, je suppose que ce n'est pas vectorisé. Voici un exemple:accélérer la vérification séquentielle si un point est dans une forme en Python
from matplotlib.patches import Rectangle
r1 = Rectangle((0,0), 10, 10)
r2 = Rectangle((50,50), 10, 10)
df = pd.DataFrame([[1,2],[-1,5], [51,52]], columns=['x', 'y'])
for j in range(df.shape[0]):
coordinates = df.x.iloc[j], df.y.iloc[j]
if r1.contains_point(coordinates):
df['location'].iloc[j] = 0
else r2.contains_point(coordinates):
df['location'].iloc[j] = 1
Quelqu'un peut-il proposer une approche pour l'accélération?
Merci. Je me demande cependant s'il existe une méthode plus générale qui ne repose pas sur un rectangle, mais qui est vectorisée? Votre approche en dépendait si je ne me trompe pas – splinter
Fondamentalement, toute structure ayant une plage de comparaison avec les valeurs présentes dans le 'DF' suivrait une implémentation similaire à celle montrée ci-dessus. Il devrait y avoir un moyen d'en extraire les points de départ et de fin et de stocker le résultat dans un tableau. –
En outre, tous les correctifs ont une méthode '.get_extents()', ce qui ne devrait poser aucun problème, je suppose. –