【发布时间】:2022-03-01 01:26:14
【问题描述】:
我想提出一种更快的方法来创建所有经纬度对之间的距离矩阵。这个QA 解决了使用标准线性代数的矢量化方式,但没有经纬度坐标。
就我而言,这些经纬度是农场。这是我的 Python 代码,对于完整的数据集(4000 (lat, lon)'s)至少需要五分钟。有什么想法吗?
> def slowdistancematrix(df, distance_calc=True, sparse=False, dlim=100):
"""
inputs: df
returns:
1.) distance between all farms in miles
2.) distance^2
"""
from scipy.spatial import distance_matrix
from geopy.distance import geodesic
unique_farms = pd.unique(df.pixel)
df_unique = df.set_index('pixel')
df_unique = df_unique[~df_unique.index.duplicated(keep='first')] # only keep unique index values
distance = np.zeros((unique_farms.size,unique_farms.size))
for i in range(unique_farms.size):
lat_lon_i = df_unique.Latitude.iloc[i],df_unique.Longitude.iloc[i]
for j in range(i):
lat_lon_j = df_unique.Latitude.iloc[j],df_unique.Longitude.iloc[j]
if distance_calc == True:
distance[i,j] = geodesic(lat_lon_i, lat_lon_j).miles
distance[j,i] = distance[i,j] # make use of symmetry
return distance, np.power(distance, 2)
【问题讨论】:
-
查看
geopy、geopandas或pyproj以处理坐标、处理大圆等。查看stackoverflow.com/questions/31632190/…。请注意,您可以将自己的距离函数传递给scipy.spatial函数。
标签: python vectorization gis