半正矢距離#

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

計算 X 和 Y 中樣本之間的半正矢距離。

半正矢(或大圓)距離是球體表面上兩點之間的角距離。 假設每個點的第一個座標是緯度,第二個是經度,以弧度為單位。 數據的維度必須為 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

回傳:
距離形狀為 (n_samples_X, n_samples_Y) 的 ndarray

距離矩陣。

注意事項

由於地球幾乎是球形的,因此半正矢公式可以很好地近似地球表面上兩點之間的距離,平均誤差小於 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.        ]])