在计算机的世界里,距离是一个非常重要的概念。例如:在机器学习、工业控制、地图导航等领域都需要使用到距离的概念。Python中提供了多种计算距离的方法,本文将从各个方面进行阐述。
一、欧几里得距离
欧几里得距离又称欧氏距离,是最常用的距离计算方法。在二维、三维、多维空间中都可以使用,计算公式如下:
def euclidean_distance(point1, point2):
distance = 0.0
for i in range(len(point1)):
distance += (point1[i] - point2[i])**2
return math.sqrt(distance)
其中,point1和point2是两个点的坐标,可以为元组、列表等。
对于两个二维点(1,2)和(3,4),可以这样使用:
point1 = (1, 2)
point2 = (3, 4)
print(euclidean_distance(point1, point2)) # 输出2.8284271247461903
二、曼哈顿距离
曼哈顿距离是指在欧几里得空间的固定直角坐标系下两个点的绝对轴距总和。计算公式如下:
def manhattan_distance(point1, point2):
distance = 0.0
for i in range(len(point1)):
distance += abs(point1[i] - point2[i])
return distance
同理,两个二维点(1,2)和(3,4)的曼哈顿距离为:
point1 = (1, 2)
point2 = (3, 4)
print(manhattan_distance(point1, point2)) # 输出4
三、切比雪夫距离
切比雪夫距离是指在欧几里得空间的固定直角坐标系下两个点每个坐标数值差的绝对值的最大值。计算公式如下:
def chebyshev_distance(point1, point2):
distance = 0.0
for i in range(len(point1)):
distance = max(distance, abs(point1[i] - point2[i]))
return distance
同理,两个二维点(1,2)和(3,4)的切比雪夫距离为:
point1 = (1, 2)
point2 = (3, 4)
print(chebyshev_distance(point1, point2)) # 输出2
四、闵可夫斯基距离
闵可夫斯基距离是一种距离的计算方式,它将欧式距离、曼哈顿距离和切比雪夫距离作为其特殊情况。一般情况下,计算公式如下:
def minkowski_distance(point1, point2, p):
distance = 0.0
for i in range(len(point1)):
distance += abs(point1[i] - point2[i])**p
return distance**(1/p)
当p=1时,就是曼哈顿距离;当p=2时,就是欧几里得距离;当p趋近于无穷大时,就是切比雪夫距离。同样,两个二维点(1,2)和(3,4)的闵可夫斯基距离为:
point1 = (1, 2)
point2 = (3, 4)
print(minkowski_distance(point1, point2, 1)) # 输出4.0
print(minkowski_distance(point1, point2, 2)) # 输出2.8284271247461903
print(minkowski_distance(point1, point2, float('inf'))) # 输出2.0
五、哈罗夫距离
哈罗夫距离适用于两组数据中每个数据点都由二进制数表示,并且对应位上不同数据的个数相加。计算公式如下:
def hamming_distance(s1, s2):
assert len(s1) == len(s2)
return sum(ch1 != ch2 for ch1, ch2 in zip(s1, s2))
其中,s1和s2为两个二进制串。例如,’1010101’和’1111101’的哈罗夫距离为2。
六、总结
本文介绍了Python中常用的距离计算方法:欧几里得距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离和哈罗夫距离。在实际应用中,不同的距离计算方法应根据实际需要进行选择,以满足需求。希望读者可以对Python中距离计算方法有更深入的了解。