(1)欧式距离
实质:其实就是应用勾股定理计算两个点的直线距离,两点间的距离
import numpy as np
vector1 = np.array([-1.000, -0.5000, 0.0000,0.5000,1.0000])
vector2 = np.array([0.1285, 0.241,0.3508,0.3999,0.3532 ])
p1=-0.4000
p2=0.2000
i=0
for i in range(5):
op1 = np.sqrt(np.sum(np.square(p1 - vector1[i])+np.square(p2-vector2[i])))
# op2 = np.linalg.norm(vector1 - vector2)
print(op1)
# print(op2)
n维向量:
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])
op1=np.sqrt(np.sum(np.square(vector1-vector2)))
op2=np.linalg.norm(vector1-vector2)
print(op1)
print(op2)
(2)曼哈顿距离
红线代表曼哈顿距离,实质就是两坐标点差值的绝对值之和,两点之间的直角距离而不是直线距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距离。曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。曼哈顿距离示意图在早期的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂贵,很慢而且有误差,如果直接使用AB的欧氏距离(欧几里德距离:在二维和三维空间中的欧氏距离的就是两点之间的距离),则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即可,这就大大提高了运算速度,而且不管累计运算多少次,都不会有误差。
import numpy as np
vector1 = np.array([-1.000, -0.5000, 0.0000,0.5000,1.0000])
vector2 = np.array([0.1285, 0.241,0.3508,0.3999,0.3532 ])
p1=-0.4000
p2=0.2000
i =0
for i in range(5):
op3 = np.sum(np.abs(p1-vector1[i])+np.abs(p2 -vector2[i]))
# op4 = np.linalg.norm(vector1 - vector2, ord=1)
print(op3)
n维向量:
vector1 = np.array([1,2,3])
vector2 = np.array([4,5,6])
op1=np.sqrt(np.sum(np.square(vector1-vector2)))
op2=np.linalg.norm(vector1-vector2)
print(op1)
print(op2)
总结: