出租车几何或曼哈顿距离(Manhattan Distance)是由十九世纪的赫尔曼·闵可夫斯基所创词汇 ,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。
在numpy中,曼哈顿距离可以这样表述
distances = np.sum(np.abs(X_train[-1,1] - Y_test[-1,1]) + np.abs(X_train[-1,0] - Y_test[-1,1]))
当然,numpy本身也提供了通过闵氏距离修改p值来直接实现包括曼哈顿距离在内的多种距离计算方式,具体如下
def minkowski_distance(vec1, vec2, p=3):
"""
闵氏距离
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
:param vec1:
:param vec2:
:param p:
:return:
"""
# return sum([(x - y) ** p for (x, y) in zip(vec1, vec2)]) ** (1 / p)
return np.linalg.norm(vec1 - vec2, ord=p)
def cosine_distance(vec1, vec2):
"""
夹角余弦
:param vec1:
:param vec2:
:return:
"""
vec1_norm = np.linalg.norm(vec1)
vec2_norm = np.linalg.norm(vec2)
return vec1.dot(vec2) / (vec1_norm * vec2_norm)
def euclidean_distance(vec1, vec2):
"""
欧氏距离
:param vec1:
:param vec2:
:return:
"""
# return np.sqrt(np.sum(np.square(vec1 - vec2)))