haversine_distances#
- sklearn.metrics.pairwise.haversine_distances(X, Y=None)[源码]#
计算 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。
- 返回:
- distancesndarray of shape (n_samples_X, n_samples_Y)
距离矩阵。
注意事项
由于地球近似为球体,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. ]])