ホームページ >バックエンド開発 >Python チュートリアル >大規模なデータセットの Python と Pandas で地理座標間の距離をすばやく計算するにはどうすればよいですか?

大規模なデータセットの Python と Pandas で地理座標間の距離をすばやく計算するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 18:58:02308ブラウズ

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

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 サイトの他の関連記事を参照してください。

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