求矩阵各个元素两两之间的欧式距离(python实现)
2017-03-15 11:10
585 查看
本文转载自:http://blog.csdn.net/uwell_peng/article/details/49992759
在很多算法中都会涉及到求向量欧式距离,例如机器学习中的KNN算法,就需要对由训练集A和测试集B中的向量组成的所有有序对
,求出
和
的欧式距离。如果一个二重的嵌套循环来实现,在向量集很大时效率不高。
这里介绍如何将这一过程用矩阵运算实现。
假设有两个三维向量集,用矩阵表示:
要求A,B这两个矩阵中的元素两两之间的欧式距离。
先求出
:
然后对
和
分别求其中每个向量的模平方,并扩展为2*3矩阵:
然后:
将上面这个矩阵一开方,就得到了A,B矩阵各个元素两两之间的欧式距离。
下面是Python实现:
在很多算法中都会涉及到求向量欧式距离,例如机器学习中的KNN算法,就需要对由训练集A和测试集B中的向量组成的所有有序对
,求出
和
的欧式距离。如果一个二重的嵌套循环来实现,在向量集很大时效率不高。
这里介绍如何将这一过程用矩阵运算实现。
假设有两个三维向量集,用矩阵表示:
要求A,B这两个矩阵中的元素两两之间的欧式距离。
先求出
:
然后对
和
分别求其中每个向量的模平方,并扩展为2*3矩阵:
然后:
将上面这个矩阵一开方,就得到了A,B矩阵各个元素两两之间的欧式距离。
下面是Python实现:
import numpy #输入的A,B为numpy.matrix格式 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)
相关文章推荐
- 通过矩阵求两个向量集中元素两两之间的欧氏距离(python实现)
- 通过矩阵求两个向量集中元素两两之间的欧氏距离(python实现)
- 通过矩阵求两个向量集中元素两两之间的欧氏距离(python实现),比直接分开求更快速
- 概率分布之间的距离度量以及python实现
- 概率分布之间的距离度量以及python实现(三)
- OpenCV代码精妙之三 实现点集元素之间最小距离
- 概率分布之间的距离度量以及python实现
- python实现两个经纬度点之间的距离和方位角
- 概率分布之间的距离度量以及python实现(四)
- 两个经纬度点之间的距离各个版本实现
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- JavaScript 实现的根据经纬度计算地球上两点之间的距离
- Html5实现如何在两个div元素之间拖放图像
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- 根据经纬度计算地球上两点之间的距离js实现代码
- 用经纬度计算两地之间的距离, C 语言实现。
- 文献关键词共现矩阵python实现
- 矩阵元素求和的实现步骤
- 5*5的矩阵中最大的元素放在中心,写一个函数实现
- Python代码实现:删除一个list里面的重复元素