approximation rapide de Haversine en Python/Pandas
Un défi se pose lors du calcul des distances entre des paires de points représentés par des coordonnées de latitude et de longitude stockées dans un Cadre de données Pandas. L'approche naïve consistant à utiliser une boucle Python pour parcourir chaque ligne et à appliquer la formule haversine peut être coûteuse en calcul pour des millions de lignes. Cependant, l'optimisation de ce processus est possible.
Pour obtenir un calcul plus rapide, nous pouvons utiliser la vectorisation à l'aide de NumPy. NumPy fournit des opérations basées sur des tableaux qui peuvent améliorer considérablement les performances en évitant les boucles explicites. Voici une version NumPy vectorisée de la fonction haversine :
<code class="python">import numpy as np def haversine_np(lon1, lat1, lon2, lat2): """ Calculate the great circle distance between two points on the earth (specified in decimal degrees). All args must be of equal length. """ lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2]) dlon = lon2 - lon1 dlat = lat2 - lat1 a = np.sin(dlat/2.0)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2.0)**2 c = 2 * np.arcsin(np.sqrt(a)) km = 6378.137 * c return km</code>
Principaux avantages :
Exemple d'utilisation :
<code class="python">import numpy as np import pandas lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000) df = pandas.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2}) km = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2']) # Or, to create a new column for distances: df['distance'] = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2'])</code>
En exploitant les capacités de vectorisation de NumPy, il devient possible de calculer les distances entre des millions de points presque instantanément. Cette approche optimisée peut améliorer considérablement l'efficacité des tâches d'analyse géospatiale dans Python/Pandas.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!