###刘声龙--202001170115--湖南信息学院
from scipy.spatial import distance
import numpy as np
import math
x1 = np.array([3,4,2])
x2 = np.array([5,6,1])
x3 = np.array([2,2,4])
x4 = np.array([6,4,5])
a=[x1,x2,x3,x4]
####欧氏距离
for i in range(3):
for j in range(i+1,4):
a1 = np.sqrt(np.square(a[i]-a[j]))
b=a1.tolist()
#print(b)
print('x{}和x{}欧氏距离测试结果是:'.format(i+1,j+1),end='')
print(round((int(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]))**(1/2),2))
#print('欧氏距离测试结果是:' + str(dist1))(int(b[0]*b[0]+b[1]*b[1]+b[2]*b[2]))**(1/2)
print()
#####曼哈顿距离
for i in range(3):
for j in range(i+1,4):
m1 = np.sum(np.abs(a[i]-a[j]))
#print('曼哈顿距离测试结果是:' + str(m1))
print('x{}和x{}曼哈顿距离测试结果是:'.format(i+1,j+1),end='')
print(str(m1))
print()
####切式距离
for i in range(3):
for j in range(i+1,4):
n1 = max(np.abs(a[i]-a[j]))
print('x{}和x{}切式距离测试结果是:'.format(i+1,j+1),end='')
print(str(n1))
print()
####明式距离(p=3)
print(" 当p=3时")
for i in range(3):
for j in range(i+1,4):
o1 = (np.sum(np.abs((a[i]-a[j]))**3))
#print(o1)
o2=pow(o1,1.0/3)
print('x{}和x{}明式距离测试结果是:'.format(i+1,j+1),end='')
print("%.2f"%o2)
print()
####马氏距离
def get_mahalanobis(x, i, j):
xT = x.T # 求转置
D = np.cov(xT) # 求协方差矩阵
invD = np.linalg.inv(D) # 协方差逆矩阵
assert 0 <= i < x.shape[0], "点 1 索引超出样本范围。"
assert -1 <= j < x.shape[0], "点 2 索引超出样本范围。"
x_A = x[i]
x_B = x.mean(axis=0) if j == -1 else x[j]
tp = x_A - x_B
return np.sqrt(dot(dot(tp, invD), tp.T))
if __name__ == '__main__':
x = np.array([[3,4,2], [5,6,1], [2,2,4], [6,4,5]])
for i in range(3):
for j in range(i+1,4):
print('x{}和x{}马氏距离测试结果是:'.format(i+1,j+1),end='')
print("%.2f"%get_mahalanobis(x, i, j))
print()
####Canberra距离
for i in range(3):
for j in range(i+1,4):
p1 = np.sum((np.abs(a[i]-a[j]))/(np.abs(a[i])+np.abs(a[j])))
print('x{}和x{}Canberra距离测试结果是:'.format(i+1,j+1),end='')
print("%.2f"%p1)
print()
####角度相似系数
for i in range(3):
for j in range(i+1,4):
t1=np.dot(a[i],a[j])/(np.linalg.norm(a[i])*np.linalg.norm(a[j]))
print('x{}和x{}角度相似系数测试结果是:'.format(i+1,j+1),end='')
print("%.2f"%t1)
Python计算各距离
最新推荐文章于 2023-08-02 23:20:15 发布