相关疑难解决方法(0)

快速的Haversine逼近(Python/Pandas)

Pandas数据帧中的每一行包含2个点的lat/lng坐标.使用下面的Python代码,计算许多(数百万)行的这两个点之间的距离需要很长时间!

考虑到2点相距不到50英里并且准确性不是很重要,是否可以更快地进行计算?

from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
    """
    Calculate the great circle distance between two points 
    on the earth (specified in decimal degrees)
    """
    # convert decimal degrees to radians 
    lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
    # haversine formula 
    dlon = lon2 - lon1 
    dlat = lat2 - lat1 
    a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
    c = 2 * asin(sqrt(a)) 
    km = 6367 * c …
Run Code Online (Sandbox Code Playgroud)

python gis numpy haversine pandas

31
推荐指数
4
解决办法
2万
查看次数

使用熊猫的欧几里德距离矩阵

我有一个.csv文件,其中包含以下格式的城市,纬度和经度数据:

CITY|LATITUDE|LONGITUDE
A|40.745392|-73.978364
B|42.562786|-114.460503
C|37.227928|-77.401924
D|41.245708|-75.881241
E|41.308273|-72.927887
Run Code Online (Sandbox Code Playgroud)

我需要以下面的格式创建一个距离矩阵(请忽略虚拟值):

         A         B         C         D         E   
A  0.000000  6.000000  5.744563  6.082763  5.656854  
B  6.000000  0.000000  6.082763  5.385165  5.477226  
C  1.744563  6.082763  0.000000  6.000000  5.385165
D  6.082763  5.385165  6.000000  0.000000  5.385165  
E  5.656854  5.477226  5.385165  5.385165  0.000000  
Run Code Online (Sandbox Code Playgroud)

我已将数据加载到pandas数据框中,并创建了一个交叉连接,如下所示:

import pandas as pd
df_A = pd.read_csv('lat_lon.csv', delimiter='|', encoding="utf-8-sig")
df_B = df_A
df_A['key'] = 1
df_B['key'] = 1 
df_C = pd.merge(df_A, df_B, on='key')  
Run Code Online (Sandbox Code Playgroud)
  • 你能帮我创建一下上面的矩阵结构吗?
  • 另外,是否可以避免涉及交叉连接的步骤?

python dataframe pandas

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

pandas ×2

python ×2

dataframe ×1

gis ×1

haversine ×1

numpy ×1