写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。
路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。
最近在做实际项目时,遇到需要计算两个向量的相似性,即需要计算不同数据样本之间的相似度。计算样本之间相似度的方法有很多,也很有学问,直接影响后续的计算结果。
本次将持续更新“相似性度量(similarity measurement)”系列文章,今天先介绍欧式距离。
1、欧式距离
欧式距离(Euclidean Distance)是一种在多维空间中测量两个点之间“直线”距离的方法。在二维和三维空间中,欧氏距离就是两点之间的实际距离,即我们通常所说的“直线距离”。在更高维的空间中,这个概念依然适用,只是我们无法直接可视化这种距离。
2、计算公式
2.1 二维平面
二维平面两个点A(
x
1
,
y
1
x_ 1, y_ 1
x1,y1)和B(
x
2
,
y
2
x_ 2, y_ 2
x2,y2)之间的欧式距离:
d
(
A
,
B
)
=
(
x
1
−
x
2
)
2
+
(
y
1
−
y
2
)
2
\ d(A,B) = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 }
d(A,B)=(x1−x2)2+(y1−y2)2
2.2 三维空间
三维空间两个点A( x 1 , y 1 , z 1 x_ 1,y_ 1, z_ 1 x1,y1,z1)和B( x 2 , y 2 , z 2 x_ 2,y_ 2, z_ 2 x2,y2,z2)之间的欧式距离:
d ( A , B ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ( z 1 − z 2 ) 2 \ d(A,B) = \sqrt{(x_1 - y_1 )^2 + (x_2 - y_2)^2 + (z_1 - z_2)^2} d(A,B)=(x1−y1)2+(x2−y2)2+(z1−z2)2
2.3 高维空间
两个向量A( x 1 , x 2 , x 3 , . . . , x n x_ 1,x_ 2, x_ 3, ..., x_ n x1,x2,x3,...,xn)和B( y 1 , y 2 , y 3 , . . . , y n y_ 1,y_ 2, y_ 3,..., y_ n y1,y2,y3,...,yn)之间的欧式距离
d ( A , B ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + … + ( x n − y n ) 2 \ d(A,B) = \sqrt{(x_1 - y_1 )^2 + (x_2 - y_2)^2 + \ldots + (x_n - y_n)^2} d(A,B)=(x1−y1)2+(x2−y2)2+…+(xn−yn)2
3、代码实现
编写代码实现欧式距离,在Python中,可以使用numpy库或者scipy来计算两个向量之间的欧式距离:
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 14 22:36:45 2024
@author: AIexplore微信公众号
"""
import numpy as np
from scipy.spatial.distance import euclidean
def euclidean_distance_1(vec1, vec2):
"""
计算两个向量之间的欧式距离
参数:
vec1 -- 第一个向量,numpy数组
vec2 -- 第二个向量,numpy数组
返回:
dist -- 两个向量之间的欧式距离
"""
dist = np.sqrt(np.sum((vec1 - vec2)**2))
return dist
def euclidean_distance_2(vec1, vec2):
dist = euclidean(vec1, vec2)
return dist
# data
vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
# 使用numpy计算欧式距离
d1 = euclidean_distance_1(vec1, vec2)
print("欧式距离 1:", d1)
# 使用scipy的euclidean函数计算欧式距离
d2 = euclidean_distance_2(vec1, vec2)
print("欧式距离 2:", d2)
- 使用numpy计算欧式距离
euclidean_distance_1函数接受两个numpy数组作为参数,并返回它们之间的欧式距离。函数内部,使用numpy的sqrt函数和sum函数来计算平方差的总和的平方根,从而得到欧式距离。
- 使用scipy计算欧式距离
首先从scipy.spatial.distance模块中导入了euclidean函数。然后,定义了两个numpy数组vec1和vec2,它们分别代表两个点或向量的坐标。最后,调用euclidean_distance_2函数并传入这两个向量作为参数,得到了它们之间的欧式距离。
参考文章
1、https://mp.weixin.qq.com/s/zBHt9A-4FV4tsnSDRfBy-g
2、https://mp.weixin.qq.com/s/g1-U59Xo7ScjscyrL61Ujw
3、https://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html