创建一个矩阵,其中包含地理点之间的距离
Create a matrix with distances between geopoints
我正在努力实现我的想法,即创建 NJ Transit Rail 中每对车站之间的距离矩阵(以公里为单位)。我有每个站点的经纬度数据,
而我想做的就是这个table。
我已经研究了一些可能的方法来实现这一点 table,但它们更多地用于几何坐标而不是地理坐标。我会使用距离矩阵,但正如我所见,它适用于另一种类型的坐标。
请帮忙!
你会这样做:
import pandas as pd
from scipy.spatial import distance_matrix
# You already have the data
data = [[5, 7], [7, 3], [8, 1]]
ctys = ['Boston', 'Phoenix', 'New York']
df = pd.DataFrame(data, columns=['xcord', 'ycord'], index=ctys)
df_mat = pd.DataFrame(distance_matrix(df.values, df.values), index=df.index, columns=df.index)
print(df_mat)
Boston Phoenix New York
Boston 0.000000 4.472136 6.708204
Phoenix 4.472136 0.000000 2.236068
New York 6.708204 2.236068 0.000000
您正在寻找地理距离,即Haversine距离。从 sklearn 0.22.2 开始,您可以使用 haversine_distance:
x_deg = df[['stop_lat','stop_lon']].values
x_rad = np.deg2rad(x_deg)
# distances in miles
distances = haversine_distances(x_rad,x_rad) * 6371 / 1.6
pd.DataFrame(distances,
index=df.stop_name, columns=df.stop_name)
你会得到这样的东西:
stop_name a b c
stop_name
a 0.000000 1.274556 1.396741
b 1.274556 0.000000 0.871521
c 1.396741 0.871521 0.000000
我正在努力实现我的想法,即创建 NJ Transit Rail 中每对车站之间的距离矩阵(以公里为单位)。我有每个站点的经纬度数据,
而我想做的就是这个table。
请帮忙!
你会这样做:
import pandas as pd
from scipy.spatial import distance_matrix
# You already have the data
data = [[5, 7], [7, 3], [8, 1]]
ctys = ['Boston', 'Phoenix', 'New York']
df = pd.DataFrame(data, columns=['xcord', 'ycord'], index=ctys)
df_mat = pd.DataFrame(distance_matrix(df.values, df.values), index=df.index, columns=df.index)
print(df_mat)
Boston Phoenix New York
Boston 0.000000 4.472136 6.708204
Phoenix 4.472136 0.000000 2.236068
New York 6.708204 2.236068 0.000000
您正在寻找地理距离,即Haversine距离。从 sklearn 0.22.2 开始,您可以使用 haversine_distance:
x_deg = df[['stop_lat','stop_lon']].values
x_rad = np.deg2rad(x_deg)
# distances in miles
distances = haversine_distances(x_rad,x_rad) * 6371 / 1.6
pd.DataFrame(distances,
index=df.stop_name, columns=df.stop_name)
你会得到这样的东西:
stop_name a b c
stop_name
a 0.000000 1.274556 1.396741
b 1.274556 0.000000 0.871521
c 1.396741 0.871521 0.000000