Python/Pandas の高速ハーバーサイン近似
パンダのデータフレーム。 Python ループを使用して各行を反復処理し、ハバーサイン式を適用するという単純なアプローチでは、数百万行の場合に計算コストが高くなる可能性があります。ただし、このプロセスを最適化することは可能です。
より高速な計算を実現するには、NumPy を使用したベクトル化を採用できます。 NumPy は、明示的なループを回避することでパフォーマンスを大幅に向上できる配列ベースの操作を提供します。以下は、Haversine 関数のベクトル化された NumPy バージョンです:
<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>
主な利点:
使用例:
<code class="python">import numpy as np import pandas lon1, lon2, lat1, lat2 = np.random.randn(4, 1000000) df = pandas.DataFrame(data={'lon1':lon1,'lon2':lon2,'lat1':lat1,'lat2':lat2}) km = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2']) # Or, to create a new column for distances: df['distance'] = haversine_np(df['lon1'],df['lat1'],df['lon2'],df['lat2'])</code>
NumPy のベクトル化機能を活用することで、数百万の点間の距離をほぼ瞬時に計算できるようになります。この最適化されたアプローチにより、Python/Pandas での地理空間分析タスクの効率が大幅に向上します。
以上がPython を使用して Pandas データフレーム内の何百万もの緯度/経度座標間の距離を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。