python中快速计算不同坐标之间的各个点的欧氏距离,有利于K近邻的计算

 初始化10个坐标,计算每个坐标与其他坐标的欧式距离

import numpy as np
x = np.random.rand(10,2)

#计算10坐标之间的差值(欧氏距离)
L = np.sum((x[:,np.newaxis,:] - x[np.newaxis,:,:]) ** 2, axis = 1)

"""
x[:,np.newaxis,;].shape   10,1,2
x[np.newaxis,:,:].shape    1,10,2
(x[:,np.newaxis,:] - x[np.newaxis,:]).shape  10,10,2
这里使用了广播的规则
x[:,np.newaxis,:] 为[[[a,b]],[[c,d]],[[e,f]],.....[[m,n]]]
x[np.newaxis,:,:] 为[[[a,b],[c,d],[e,f],.....[m,n]]]

brodacast后:
x[:,np.newaxis,:].shape  10,10,2
[[[a,b],[a,b],[a,b]....[a,b]]
 [[c,d],[c,d],[c,d]....[c,d]]
 .
 .
 [[m,n],[m,n],[m,n]...[m,n]]
]
x[np.newaxis,:,:].shap 10,10,2
[[[a,b],[c,d],[e,f]....[m,n]]
 [[a,b],[c,d],[e,f]....[m,n]]
 .
 .
 [[a,b],[c,d],[e,f]....[m,n]]
]

相减之后就是所谓的坐标差,对角线上为0,说明是自己与自己的距离
"""
t = x[:,np.newaxis,:] - x[np.newaxis,:,:]) ** 2
L = np.sum(t, axis = 1).shape 
#L.shape 10, 10。平方是由于欧氏距离的计算公式,sum是x,y轴差值相加
#axis 是指定行进行相加

np.partation(L,2) #第2个位置为第2小的数,前面是小于该位置的数,后面是大于
np.argsort(L,axis = 1)#返回最近邻的列表

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值