永发信息网

python计算每两个向量之间的距离并保持到矩阵中

答案:1  悬赏:0  手机版
解决时间 2021-11-25 00:49
python计算每两个向量之间的距离并保持到矩阵中
最佳答案
在很多算法中都会涉及到求向量欧式距离,例如机器学习中的KNN算法,就需要对由训练集A和测试集B中的向量组成的所有有序对(Ai,Bi),求出Ai和Bi的欧式距离。这样的话就会带来一个二重的嵌套循环,在向量集很大时效率不高。
这里介绍如何将这一过程用矩阵运算实现。
假设有两个三维向量集,用矩阵表示:

A=[a11a12a21a22a31a32]

B=⎡⎣⎢⎢b11b12b13b21b22b23b31b32b33⎤⎦⎥⎥

要求A,B两个集合中的元素两两间欧氏距离。

先求出ABT:

ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13ak1bk1∑k=13ak2bk1∑k=13ak1bk2∑k=13ak2bk2∑k=13ak1bk3∑k=13ak2bk3⎤⎦⎥⎥⎥⎥⎥

然后对A和BT分别求其中每个向量的模平方,并扩展为2*3矩阵:

Asq=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2∑k=13(ak1)2∑k=13(ak2)2⎤⎦⎥⎥⎥⎥⎥

Bsq=⎡⎣⎢⎢⎢⎢⎢∑k=13(bk1)2∑k=13(bk1)2∑k=13(bk2)2∑k=13(bk2)2∑k=13(bk3)2∑k=13(bk3)2⎤⎦⎥⎥⎥⎥⎥

然后:

Asq+Bsq−2ABT=⎡⎣⎢⎢⎢⎢⎢∑k=13(ak1−bk1)2∑k=13(ak2−bk1)2∑k=13(ak1−bk2)2∑k=13(ak2−bk2)2∑k=13(ak1−bk3)2∑k=13(ak2−bk3)2⎤⎦⎥⎥⎥⎥⎥

将上面这个矩阵一开平方,就得到了A,B向量集两两间的欧式距离了。
下面是Python实现:
import numpy
def EuclideanDistances(A, B):
BT = B.transpose()
vecProd = A * BT
SqA = A.getA()**2
sumSqA = numpy.matrix(numpy.sum(SqA, axis=1))
sumSqAEx = numpy.tile(sumSqA.transpose(), (1, vecProd.shape[1]))
SqB = B.getA()**2
sumSqB = numpy.sum(SqB, axis=1)
sumSqBEx = numpy.tile(sumSqB, (vecProd.shape[0], 1))
SqED = sumSqBEx + sumSqAEx - 2*vecProd
ED = (SqED.getA())**0.5
return numpy.matrix(ED)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
你好我想拿钱怎么拿
长沙市陈家湖站到省博物馆步行路线
全球两个字翻译英文是怎么写
漂落的漂还可以组什么词
陆记陶源地址在什么地方,想过去办事,
三星S8300C与CISCO HWIC-1GE-SFP哪个好
JH炫甲阁地址好找么,我有些事要过去,
作文《那天我真伤心》350字
从黑桥到小洋房西口坐什么车能到?
谁有milk姐妹1-4无修中文字幕的?
22又二分之一乘6%加2.75除与一又三分之2加1.2
歌词:一阵风,一片云,又是一场雨,人已散,
哪项 sqlserver 组件/工具用于编写和编辑
悬崖伏虎啸是谁说的
为啥现在汉人穷,满人回民富
推荐资讯
施工噪声排放控制是四节一环保中的什么措施
媚甲阁地址好找么,我有些事要过去,
邦迪粘上多长时间拿下来
昨夜思纣千条路,今日还是原路行!什么意思
停车场(清河路)(冷家东巷与沿河大道交叉口北1
如何换三星n0te4的手机屏幕
万和家的燃气壁这个品牌怎么样,值得信赖么?
龙门吊接触器带电阻怎么接
还有一个问题要追问啊,我可能晚上8点到青岛
整袋装的干银耳,开口放了半年后,颜色变黄了
PRO-E打开时出现这个错误是怎么回事?求各位大
0.064的负三分之一次方减去负八分之七的零次
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?