Python 및 Pandas의 빠른 Haversine 근사
Haversine 공식을 사용하여 지리적 좌표 간의 거리를 계산하는 것은 대규모 데이터 세트의 경우 시간이 많이 걸릴 수 있습니다. 정확성이 중요하지 않고 포인트가 짧은 거리(예: 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 코드를 활용하여 배열에서 직접 수행됩니다. 이로 인해 특히 대규모 데이터 세트의 경우 성능이 크게 향상됩니다.
참고:
이 최적화된 접근 방식은 상당한 속도 향상을 제공하지만 정확도에는 약간의 절충점이 있습니다. 벡터화되지 않은 원래 수식. 그러나 거리가 50마일 미만이고 정확도가 가장 중요하지 않은 경우에는 정밀도의 한계 손실보다 성능상의 이점이 더 큽니다.
위 내용은 대규모 데이터 세트에 대해 Python과 Pandas에서 지리적 좌표 사이의 거리를 어떻게 빠르게 계산할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!