Python计算各距离

###刘声龙--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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值