欧氏距离详解及在matlab中的实现
2014-12-11 10:12
281 查看
360百科:
二维公式
d = sqrt((x1-x2)^2+(y1-y2)^2)
三维公式
d=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
推广到n维空间,
欧氏距离的公式 :d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2n,xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标
n维欧氏空间是一个点集,它的每个点可以表示为(x(1),x(2),…x(n)),其中x(i)(i=1,2…n)是实数,称为x的第i个坐标,两个点x和y=(y(1),y(2)…y(n))之间的距离d(x,y)定义为上面的公式。
在matlab中实现时,将d=sqrt( ∑(xi1-xi2)^2 )展开 d=sqrt( ∑(xi1^2-2xi1*xi2+xi2^2))
例:
输入样本集a,xi1^2表示在第一个样本点的每一维进行平方并求和,aa = sum(a.*a,2);xi2^2也是如此,xi1*xi2实际上就是a*a',xi1*xi2表示两个样本点的对应维数上的值相乘并求和
>> a=[1 2 3;4 5 6;7 8 9;10 11 12]; %a为3维空间中的4个样本
>> aa = sum(a.*a,2); %xi^2,aa为4*1,每个元素代表一个样本的每维的平方和
>> ab = a*a'; %ab是4*4的,每个元素表示两个样本点的对应维数上的值相乘并求和
>> D = bsxfun(@plus,aa,aa') - 2*ab; %按照公式d=sqrt( ∑(xi1^2-2xi1*xi2+xi2^2)),将aa复制4列,aa'复制4行,最后的都的
%D是4*4,每个元素表示两个样本点的欧氏距离
>> D = sqrt(D);
对于更多的样本数也是如此的方法。
还有一种简单的求法,可以得到相同的结果,但效率较低,不适用于样本数多的时候。
当输入两个数据集时:
>> aa = sum(a.*a,2);
>> bb = sum(b.*b,2);
>> ab = a*b';
>> D = bsxfun(@plus,aa,bb') - 2*ab;
>> D = sqrt(D);
二维公式
d = sqrt((x1-x2)^2+(y1-y2)^2)
三维公式
d=sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2)
推广到n维空间,
欧氏距离的公式 :d=sqrt( ∑(xi1-xi2)^2 ) 这里i=1,2n,xi1表示第一个点的第i维坐标,xi2表示第二个点的第i维坐标
n维欧氏空间是一个点集,它的每个点可以表示为(x(1),x(2),…x(n)),其中x(i)(i=1,2…n)是实数,称为x的第i个坐标,两个点x和y=(y(1),y(2)…y(n))之间的距离d(x,y)定义为上面的公式。
在matlab中实现时,将d=sqrt( ∑(xi1-xi2)^2 )展开 d=sqrt( ∑(xi1^2-2xi1*xi2+xi2^2))
例:
输入样本集a,xi1^2表示在第一个样本点的每一维进行平方并求和,aa = sum(a.*a,2);xi2^2也是如此,xi1*xi2实际上就是a*a',xi1*xi2表示两个样本点的对应维数上的值相乘并求和
>> a=[1 2 3;4 5 6;7 8 9;10 11 12]; %a为3维空间中的4个样本
>> aa = sum(a.*a,2); %xi^2,aa为4*1,每个元素代表一个样本的每维的平方和
>> ab = a*a'; %ab是4*4的,每个元素表示两个样本点的对应维数上的值相乘并求和
>> D = bsxfun(@plus,aa,aa') - 2*ab; %按照公式d=sqrt( ∑(xi1^2-2xi1*xi2+xi2^2)),将aa复制4列,aa'复制4行,最后的都的
%D是4*4,每个元素表示两个样本点的欧氏距离
>> D = sqrt(D);
对于更多的样本数也是如此的方法。
还有一种简单的求法,可以得到相同的结果,但效率较低,不适用于样本数多的时候。
当输入两个数据集时:
>> aa = sum(a.*a,2);
>> bb = sum(b.*b,2);
>> ab = a*b';
>> D = bsxfun(@plus,aa,bb') - 2*ab;
>> D = sqrt(D);
相关文章推荐
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(3)编码过程——主程序
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(5)编码过程——精细扫描
- 基于欧氏距离和马氏距离的异常点检测—matlab实现
- 利用MATLAB实现图片切换动画效果详解
- Matlab调用C++代码的具体mex实现详解
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(1)算法概述
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- 深度学习FPGA实现基础知识7(深度学习Matlab工具箱代码详解)
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(6)解码过程——主程序
- 遗传学详解及Matlab算法实现
- MATLAB实现多分类和libsvm工具箱的安装使用详解
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- 菜鸟学matlab之智能算法(1)------蚁群算法即相关代码实现详解
- 多级树集合分裂(SPIHT)算法的过程详解和Matlab实现(4)编码过程——排序扫描
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现
- matlab实现炉温模糊控制器设计与仿真和PID控制器仿真比较详解_智能计算期末3
- 机器学习笔记----Fuzzy c-means(FCM)模糊聚类详解及matlab实现
- Kmeans算法详解及MATLAB实现
- Kmeans算法详解及MATLAB、Python实现
- 多级树集合分裂(SPIHT)算法的过程详解与Matlab实现(8)实例演示