常见距离公式的MATLAB代码(一)

大家好! 最近在研究小样本聚类,作为一个初学者,首先肯定是学习一下它的预备知识距离公式啦~在了解了各种距离公式的定义之后,想要看下它们的代码是怎么写的,但是网上大多都是dist表示的代码,于是准备自己动手写一下。根据这些天整理的笔记,总结如下:
(当然有些地方可能写的不太对,希望能和大家共同探讨:))

1、欧几里得距离(Euclidean Distance)

*也称欧式距离。

*我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。

*在一个N维度的空间里,求两个点的距离,这个距离肯定是一个大于零的数字,那么这个距离需要用两个点在各自维度上的坐标相减,平方后加和再开方。

*根据计算,可以将它视为L2范数。

python 欧式距离 欧式距离代码_曼哈顿距离


(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧氏距离

python 欧式距离 欧式距离代码_曼哈顿距离_02


(2)n维空间上两点a(x1,x2………xn)与b(y1,y2………yn)的欧氏距离

python 欧式距离 欧式距离代码_欧几里得距离_03


以输入样本A=[1,2,3;4,5,6;7,8,9]为例,用MATLAB计算欧氏距离,代码如下:

clc;
clear all;
A=[1 2 3;4 5 6;7 8 9];
L1=sum(A.*A,2);
L2=A*A';
D=bsxfun(@plus,L1,L1')-2*L2;
D=sqrt(D);

2、曼哈顿距离(Manhattan Distance)

*是由十九世纪的赫尔曼·闵可夫斯基所创词汇,是种使用在几何度量空间的几何学用语,用以标明两个点在标准坐标系上的绝对轴距总和。

*也称为城市街区距离(City Block distance),顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。

*是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。

*根据计算,可以将它视为L1范数。

python 欧式距离 欧式距离代码_切比雪夫距离_04


python 欧式距离 欧式距离代码_python 欧式距离_05


(1)二维平面上两点a(x1,y1)与b(x2,y2)间的曼哈顿距离

python 欧式距离 欧式距离代码_切比雪夫距离_06


(2)n维空间上两点a(x1,x2………xn)与b(y1,y2………yn)的曼哈顿距离

python 欧式距离 欧式距离代码_切比雪夫距离_07


以输入样本A=[1,2,3;4,5,6;7,8,9]为例,用MATLAB计算曼哈顿距离,代码如下:

clc;
clear all;
A=[1 2 3;4 5 6;7 8 9];
A=A';
[m,n]=size(A);
B=perms(1:n);
B=B(:,1:2);
B=sort(B,2);
B=unique(B,'rows');
l=length(B);
a=zeros(m,l);
for i=1:l
    R1=A(:,B(i,1));
    R2=A(:,B(i,2));
    a(:,i)=abs(R1-R2);
end
D=sum(a);

3、切比雪夫距离(Chebyshevdistance)

*国际象棋中,国王可以直行、横行、斜行。国王走一步,可以移动到相邻的8个方格的任意一个。国王从格子(X1,Y1) 到格子(X2,Y2)最少需要多少步?这个距离就是切比雪夫距离。

*以数学的观点来看,切比雪夫距离是由一致范数(uniform norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。

*切比雪夫距离公式简单理解为就是各坐标数值差的最大值。

python 欧式距离 欧式距离代码_切比雪夫距离_08


(1)二维平面上两点a(x1,y1)与b(x2,y2)间的切比雪夫距离

python 欧式距离 欧式距离代码_python 欧式距离_09


(2)n维空间上两点a(x1,x2………xn)与b(y1,y2………yn)的切比雪夫距离

python 欧式距离 欧式距离代码_切比雪夫距离_10


以输入样本A=[1,2,3;4,5,6;7,8,9]为例,用MATLAB计算切比雪夫距离,代码如下:

clc;
clear all;
A=[1 2 3;4 5 6;7 8 9];
A=A';
[m,n]=size(A);
B=perms(1:n);
B=B(:,1:2);
B=sort(B,2);
B=unique(B,'rows');
l=length(B);
a=zeros(m,l);
for i=1:l
    R1=A(:,B(i,1));
    R2=A(:,B(i,2));
    a(:,i)=abs(R1-R2);
end
D=max(a);

与曼哈顿距离求和不同的是,切比雪夫求最大值,所以代码最后改成求max即可。

今天先简要写这三个距离公式,下一篇再更新其他的。

python 欧式距离 欧式距离代码_距离公式_11