Python / Numpy массивы векторизация приложений различных форм - PullRequest
0 голосов
/ 11 января 2019

Попытка реализовать функцию 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,), что, как я полагаю, связано с тем, что кадры данных не имеют одинаковый размер. Есть ли способ исправить это и сохранить векторизованные операции, чтобы избежать циклов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...