天天看點

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

常見距離公式的MATLAB代碼(一)

大家好! 最近在研究小樣本聚類,作為一個初學者,首先肯定是學習一下它的預備知識距離公式啦~在了解了各種距離公式的定義之後,想要看下它們的代碼是怎麼寫的,但是網上大多都是dist表示的代碼,于是準備自己動手寫一下。根據這些天整理的筆記,總結如下:

(當然有些地方可能寫的不太對,希望能和大家共同探讨:))

1、歐幾裡得距離(Euclidean Distance)

*也稱歐式距離。

*我們國小、國中和高中接觸到的兩個點在空間中的距離一般都是指歐氏距離。

*在一個N次元的空間裡,求兩個點的距離,這個距離肯定是一個大于零的數字,那麼這個距離需要用兩個點在各自次元上的坐标相減,平方後加和再開方。

*根據計算,可以将它視為L2範數。

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的歐氏距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(2)n維空間上兩點a(x1,x2………xn)與b(y1,y2………yn)的歐氏距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

以輸入樣本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範數。

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)
常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的曼哈頓距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(2)n維空間上兩點a(x1,x2………xn)與b(y1,y2………yn)的曼哈頓距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

以輸入樣本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)的一種。

*切比雪夫距離公式簡單了解為就是各坐标數值差的最大值。

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(1)二維平面上兩點a(x1,y1)與b(x2,y2)間的切比雪夫距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

(2)n維空間上兩點a(x1,x2………xn)與b(y1,y2………yn)的切比雪夫距離

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

以輸入樣本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即可。

今天先簡要寫這三個距離公式,下一篇再更新其他的。

常見距離公式的MATLAB代碼(一)常見距離公式的MATLAB代碼(一)

繼續閱讀