Python 如何使用scikit中的haversine distance使用DistanceMetrix.pairwise()
如何使用sklearn库中的haversine成对函数获得以公里为单位的距离?查看示例中从scikit learn返回的数字是不正确的,这让我相信我没有正确地调用它 示例代码:Python 如何使用scikit中的haversine distance使用DistanceMetrix.pairwise(),python,scikit-learn,Python,Scikit Learn,如何使用sklearn库中的haversine成对函数获得以公里为单位的距离?查看示例中从scikit learn返回的数字是不正确的,这让我相信我没有正确地调用它 示例代码: from math import radians, cos, sin, asin, sqrt def haversine(lon1, lat1, lon2, lat2): """ Calculate the great circle distance between two points on
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
from sklearn.neighbors import DistanceMetric
dist = DistanceMetric.get_metric('haversine')
paris = (48.8566, 2.3522)
lyon = (45.7640, 4.8357)
hdist = haversine(paris[1],paris[0], lyon[1], lyon[0])
skdist = dist.pairwise([paris], [lyon]) * 6371
# Returns: The distance between Paris and Lyon is 391km. sklearn=17766km
"The distance between Paris and Lyon is {0:.3g}km. sklearn={1:.5g}km".format(hdist, skdist[0][0])
从sklearn文档:
请注意,哈弗森距离度量需要以下格式的数据:
[纬度、经度],输入和输出均以
弧度
因此,在应用该函数之前,请将纬度和经度转换为弧度:
skdist = dist.pairwise(np.radians([paris]), np.radians([lyon])) * 6371