ホームページ >バックエンド開発 >Python チュートリアル >Python で緯度と経度の座標間の距離をすばやく計算するにはどうすればよいですか?

Python で緯度と経度の座標間の距離をすばやく計算するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 23:36:451049ブラウズ

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

高速ハーバーサイン近似: Python/Pandas ソリューション

概要

緯度間の距離の計算経度座標は地理空間データ分析における一般的なタスクです。ただし、数百万行に対して従来の Haversine 式を使用すると、計算コストが高くなる可能性があります。この記事では、実行時間を短縮するための NumPy ベクトル化を使用した高速な代替案を紹介します。

ベクトル化された NumPy ソリューション

NumPy ベクトル化アプローチでは、データの配列を操作する NumPy 関数を利用し、 Python のループの遅さ。以下は、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>

使用法

ベクトル化されたソリューションを使用するには、入力の緯度と経度の値が NumPy 配列である必要があります。たとえば、Pandas DataFrame の距離を計算するには、次のように必要な列を抽出し、haversine_np 関数を使用できます。

<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>

利点

NumPy ベクトル化このアプローチによりパフォーマンスが大幅に向上し、数百万の距離を瞬時に計算できるようになります。これは、ループの遅さを回避し、NumPy の効率的な配列操作を利用することで実現されます。

以上がPython で緯度と経度の座標間の距離をすばやく計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。