ホームページ >バックエンド開発 >Python チュートリアル >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 サイトの他の関連記事を参照してください。