approximation rapide de Haversine : une solution Python/Pandas
Introduction
Calcul des distances entre la latitude et les coordonnées de longitude sont une tâche courante dans l'analyse des données géospatiales. Cependant, l’utilisation de la formule Haversine traditionnelle pour des millions de lignes peut s’avérer coûteuse en termes de calcul. Cet article présente une alternative rapide utilisant la vectorisation NumPy pour des temps d'exécution plus rapides.
Solution NumPy vectorisée
L'approche de vectorisation NumPy utilise des fonctions NumPy qui fonctionnent sur des tableaux de données, évitant ainsi la lenteur du bouclage en Python. Vous trouverez ci-dessous la version 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>
Utilisation
Pour utiliser la solution vectorisée, les valeurs de latitude et de longitude d'entrée doivent être des tableaux NumPy. Par exemple, pour calculer les distances pour un Pandas DataFrame, vous pouvez extraire les colonnes nécessaires et utiliser la fonction haversine_np comme suit :
<code class="python">df = pd.DataFrame(...your_dataframe...) lon1, lat1, lon2, lat2 = df['lon1'], df['lat1'], df['lon2'], df['lat2'] df['distance'] = haversine_np(lon1, lat1, lon2, lat2)</code>
Avantages
La vectorisation NumPy Cette approche améliore considérablement les performances, permettant le calcul instantané de millions de distances. Ceci est réalisé en évitant la lenteur du bouclage et en utilisant les opérations de tableau efficaces de NumPy.
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!