海弗森距离#

sklearn.metrics.pairwise.haversine_distances(X, Y=None)[source]#

计算X和Y中样本之间的Haversine距离。

Haversine距离(或大圆距离)是球体表面上两点之间的角距离。假设每个点的第一个坐标是纬度,第二个坐标是经度,单位为弧度。数据的维度必须为2。

\[D(x, y) = 2\arcsin[\sqrt{\sin^2((x_{lat} - y_{lat}) / 2) + \cos(x_{lat})\cos(y_{lat})\ sin^2((x_{lon} - y_{lon}) / 2)}]\]
参数:
X形状为(n_samples_X, 2)的{类数组,稀疏矩阵}

特征数组。

Y形状为(n_samples_Y, 2)的{类数组,稀疏矩阵},默认为None

可选的第二个特征数组。如果为None,则使用Y=X

返回值:
distances形状为(n_samples_X, n_samples_Y)的ndarray

距离矩阵。

备注

由于地球近似于球形,因此Haversine公式可以很好地逼近地球表面两点之间的距离,平均误差小于1%。

示例

我们想计算埃塞萨机场(阿根廷布宜诺斯艾利斯)和戴高乐机场(法国巴黎)之间的距离。

>>> from sklearn.metrics.pairwise import haversine_distances
>>> from math import radians
>>> bsas = [-34.83333, -58.5166646]
>>> paris = [49.0083899664, 2.53844117956]
>>> bsas_in_radians = [radians(_) for _ in bsas]
>>> paris_in_radians = [radians(_) for _ in paris]
>>> result = haversine_distances([bsas_in_radians, paris_in_radians])
>>> result * 6371000/1000  # multiply by Earth radius to get kilometers
array([[    0.        , 11099.54035582],
       [11099.54035582,     0.        ]])