ホームページ >バックエンド開発 >Python チュートリアル >大規模なデータセットの Python と Pandas で地理座標間の距離をすばやく計算するにはどうすればよいですか?
Python と Pandas での高速ハーバーサイン近似
ハーバーサイン公式を使用した地理座標間の距離の計算は、大規模なデータセットでは時間がかかる場合があります。精度が重要ではなく、ポイントが短距離内 (例: 50 マイル未満) にあるアプリケーションの場合、プロセスを大幅に高速化できる最適化があります。
ベクトル化された Numpy 実装
Haversine 式は NumPy 配列を使用してベクトル化できます。このアプローチでは、NumPy の最適化された数学関数を活用して配列全体で計算を実行し、明示的なループの必要性を排除し、パフォーマンスを向上させます。
<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>
Pandas の統合
ベクトル化されたPandas データフレームを使用した NumPy 関数は簡単です。 haversine_np への入力は、データフレームから列として直接提供できます。例:
<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>
ベクトル化の利点
ベクトル化により、Python では本質的に遅い明示的なループの必要性が回避されます。代わりに、NumPy の最適化された基盤となる C コードを利用して、ベクトル化された操作が配列に対して直接実行されます。これにより、特に大規模なデータセットの場合、パフォーマンスが大幅に向上します。
注:
この最適化されたアプローチは大幅な高速化を実現しますが、以前のアプローチと比べて精度に若干のトレードオフが生じます。ベクトル化されていない元の式。ただし、距離が 80 マイル未満で精度が最重要ではない場合、パフォーマンスの利点は精度のわずかな損失を上回ります。
以上が大規模なデータセットの Python と Pandas で地理座標間の距離をすばやく計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。