1 回答

TA贡献1786条经验 获得超11个赞
给定所需的输出,可以通过不对haversine函数进行向量化来避免错误,因为这会将标量传递给函数(如上面的注释所述)。因此,您可以致电cdist:
import numpy as np
from scipy.spatial.distance import cdist
def haversine(x, y):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
print(type(x))
lat1, lon1 = np.radians(x)
lat2, lon2 = np.radians(y)
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat/2)**2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon/2)**2
c = 2 * np.arcsin(np.sqrt(a))
r = 6371 # Radius of earth in kilometers. Use 3956 for miles
return c * r
gas_coords = np.array([[50, 80], [50, 81]])
postal_coords = np.array([[51, 80], [51, 81]])
cdist(postal_coords, gas_coords, metric=haversine)
添加回答
举报