Попытка реализовать функцию haversine, определенную как:
def haversine(lat1, lon1, lat2, lon2):
miles_constant = 3959
lat1, lon1, lat2, lon2 = map(np.deg2rad, [lat1, lon1, lat2, lon2])
dlat = lat2 - lat1
dlon = lon2 - lon1
a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
c = 2 * np.arcsin(np.sqrt(a))
mi = miles_constant * c
return mi
На следующие рамки данных панд:
df1
latitude longitude
0 42.68751 -73.81643
1 42.68971 -73.82021
2 42.72410 -73.79822
3 42.65157 -73.77638
4 42.68873 -73.81854
5 42.72874 -73.79807
6 42.68031 -73.78444
df2
latitude longitude
0 42.68751 -73.81643
1 42.68971 -73.82021
2 42.72410 -73.79822
3 42.65157 -73.77638
4 42.68873 -73.81854
5 42.72874 -73.79807
6 42.68031 -73.78444
7 42.65334 -73.75142
8 42.72111 -73.80036
9 42.67807 -73.82819
10 42.70959 -73.82096
11 42.65082 -73.75377
12 42.64560 -73.74992
13 42.69310 -73.84938
14 42.72231 -73.80328
15 42.70898 -73.82207
16 42.71840 -73.83377
Когда я пытаюсь
df['distance'] = haversine(df2['latitude'].values, df2['longitude'].values,\
df1['latitude'].values, df1['longitude'].values)
Я получаю ValueError: операнды не могут быть переданы вместе с формами (6,) (16,), что, как я полагаю, связано с тем, что кадры данных не имеют одинаковый размер. Есть ли способ исправить это и сохранить векторизованные операции, чтобы избежать циклов?