Maison >développement back-end >Tutoriel Python >Comment puis-je calculer rapidement les distances entre les coordonnées de latitude et de longitude en Python ?

Comment puis-je calculer rapidement les distances entre les coordonnées de latitude et de longitude en Python ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-31 23:36:451050parcourir

How Can I Calculate Distances Between Latitude and Longitude Coordinates Quickly in Python?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn