>  기사  >  백엔드 개발  >  Python에서 위도와 경도 좌표 사이의 거리를 어떻게 빠르게 계산할 수 있습니까?

Python에서 위도와 경도 좌표 사이의 거리를 어떻게 빠르게 계산할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-31 23:36:45962검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.