Векторизация расчета расстояния Haversine в Python

Я пытаюсь вычислить матрицу расстояний для длинного списка местоположений, определенных по Широте и Долготе, используяHaversine формула, которая берет два кортежа координатных пар, чтобы получить расстояние:

def haversine(point1, point2, miles=False):
    """ Calculate the great-circle distance bewteen two points on the Earth surface.

    :input: two 2-tuples, containing the latitude and longitude of each point
    in decimal degrees.

    Example: haversine((45.7597, 4.8422), (48.8567, 2.3508))

    :output: Returns the distance bewteen the two points.
    The default unit is kilometers. Miles can be returned
    if the ``miles`` parameter is set to True.

    """

Я могу рассчитать расстояние между всеми точками, используя вложенный цикл for следующим образом:

data.head()

   id                      coordinates
0   1   (16.3457688674, 6.30354512503)
1   2    (12.494749307, 28.6263955635)
2   3    (27.794615136, 60.0324947881)
3   4   (44.4269923769, 110.114216113)
4   5  (-69.8540884125, 87.9468778773)

используя простую функцию:

distance = {}
def haver_loop(df):
    for i, point1 in df.iterrows():
        distance[i] = []
        for j, point2 in df.iterrows():
            distance[i].append(haversine(point1.coordinates, point2.coordinates))

    return pd.DataFrame.from_dict(distance, orient='index')

Но это занимает довольно много времени, учитывая сложность времени, около 20 секунд за 500 очков, и у меня гораздо более длинный список. Это заставляет меня смотреть на векторизацию, и я столкнулся сnumpy.vectorize ((документы), но не могу понять, как применить его в этом контексте.

Ответы на вопрос(3)

Ваш ответ на вопрос