Maison > développement back-end > Tutoriel Python > Comment calculer rapidement les distances entre les coordonnées géographiques en Python et Pandas pour de grands ensembles de données ?

Comment calculer rapidement les distances entre les coordonnées géographiques en Python et Pandas pour de grands ensembles de données ?

Patricia Arquette
Libérer: 2024-11-02 18:58:02
original
341 Les gens l'ont consulté

How Can You Quickly Calculate Distances Between Geographic Coordinates in Python and Pandas for Large Datasets?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal