赞
踩
在数学世界中,任何维度上两点之间的最短距离称为欧几里得距离。它是两点之差的平方和的平方根。
在python中我们常用的计算欧几里得距离的方法有三种:
在 Python 中,numpy、scipy 模块配备了执行数学运算并计算两点之间的线段的功能。
当坐标为数组形式时 , 可以使用 numpy 模块查找所需的距离。它具有 norm() 函数,可以返回数组的 向量范数 。可以帮助计算两个坐标之间的欧几里得距离,如下所示。
当坐标为数组形式时,可以使用 numpy 模块查找所需的距离。它具有 norm() 函数,可以返回数组的向量范数。可以帮助计算两个坐标之间的欧几里得距离,如下所示。
import numpy as np
a = np.array((1, 2, 3))
b = np.array((4, 5, 6))
dist = np.linalg.norm(a-b)
print(dist)
输出结果:
5.196152422706632
参数 | 含义 |
---|---|
0 | 表示按列向量来进行处理求多个列向量的范数 |
1 | 表示按行向量来进行处理,求多个行向量的范数 |
None | 表示整个矩阵的范数 |
4.keepdims:表示是否保持矩阵的二位特性,True表示保持,False表示不保持,默认为False |
我们还可以使用 numpy 模块直接实现数学公式。对于此方法,我们将使用 numpy.sum() 函数,该函数返回元素的总和,而 numpy.square() 函数将返回元素的平方。
import numpy as np
a = np.array((1, 2, 3))
b = np.array((4, 5, 6))
dist = np.sqrt(np.sum(np.square(a-b)))
print(dist)
输出结果:
5.196152422706632
实现欧几里得距离公式的另一种方法是使用 dot() 函数。我们可以找到点差及其转置的点积,返回平方和。
import numpy as np
a = np.array((1, 2, 3))
b = np.array((4, 5, 6))
temp = a-b
dist = np.sqrt(np.dot(temp.T, temp))
print(dist)
输出结果:
5.196152422706632
我们讨论了使用 numpy 模块计算欧几里得距离的不同方法。但是,这些方法可能会有点慢,因此我们有较快的替代方法。
scipy 库具有许多用于数学和科学计算的功能。distance.euclidean() 函数返回两点之间的欧几里得距离。
from scipy.spatial import distance
a = (1, 2, 3)
b = (4, 5, 6)
print(distance.euclidean(a, b))
输出结果:
5.196152422706632
math 模块也可以用作替代。该模块的 dist() 函数可以返回两点之间的线段。
from math import dist
a = (1, 2, 3)
b = (4, 5, 6)
print(dist(a,b))
输出结果:
5.196152422706632
下面展示一些 python欧氏距离计算
。
def getDistanceMatrix(datas):
N,D = np.shape(datas) # datas NxD
dists = np.zeros([N,N])
//不太懂
for i in range(N):
for j in range(N):
vi = datas[i,:]
vj = datas[j,:]
dists[i,j]= np.sqrt(np.dot((vi-vj),(vi-vj)))
return dists
#这里的距离指的是欧式距离,得到的结果为一个N*N的矩阵。
代码仔细解读:
待解答
for i in range(N):
for j in range(N):
vi = datas[i,:]
vj = datas[j,:]
dists[i,j]= np.sqrt(np.dot((vi-vj),(vi-vj)))
return dists
更新于2023年2月9日
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。