approximation rapide de Haversine en Python et Pandas
Le calcul des distances entre les coordonnées géographiques à l'aide de la formule Haversine peut prendre beaucoup de temps pour les grands ensembles de données. Pour les applications où la précision n'est pas critique et où les points se trouvent à une courte distance (par exemple, moins de 50 miles), il existe des optimisations qui peuvent accélérer considérablement le processus.
Implémentation Numpy vectorisée
La formule Haversine peut être vectorisée à l'aide de tableaux NumPy. Cette approche exploite les fonctions mathématiques optimisées de NumPy pour effectuer des calculs sur des tableaux entiers, éliminant ainsi le besoin de boucles explicites et améliorant les performances.
<code class="python">import numpy as np def haversine_np(lon1, lat1, lon2, lat2): 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>
Intégration Pandas
Intégration du vecteur La fonction NumPy avec les dataframes Pandas est simple. Les entrées de haversine_np peuvent être directement fournies sous forme de colonnes à partir du dataframe. Par exemple :
<code class="python">import pandas as pd # Randomly generated data lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000) df = pd.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2}) # Calculate distances using vectorized NumPy function km = haversine_np(df['lon1'], df['lat1'], df['lon2'], df['lat2']) # Append distances to dataframe df['distance'] = km</code>
Avantages de la vectorisation
La vectorisation évite le besoin de boucles explicites, qui sont intrinsèquement lentes en Python. Au lieu de cela, les opérations vectorisées sont effectuées directement sur les tableaux, en exploitant le code C sous-jacent optimisé de NumPy. Cela entraîne des améliorations significatives des performances, en particulier pour les grands ensembles de données.
Remarque :
Bien que cette approche optimisée fournisse des accélérations substantielles, elle introduit un petit compromis en termes de précision par rapport à la formule originale non vectorisée. Cependant, dans les cas où les distances sont inférieures à 50 miles et où la précision n'est pas primordiale, les avantages en termes de performances l'emportent sur la perte marginale de précision.
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!