I would like to come up with a faster way to create a distance matrix between all lat lon pairs. This QA addresses doing a vectorized way with standard Linear Algebra, but without Lat Lon coordinates.
In my case these lat longs are farms. Here is my Python code, which for the full data set (4000 (lat, lon)'s) takes at least five minutes. Any ideas?
> 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)