matlab pdist函數官方詳解

pdist

成對觀測值之間的兩兩距離


語法

D = pdist(X)

D = pdist(X,Distance)

D = pdist(X,Distance,DistParameter)

說明

D = pdist(X) 返回 X 中成對觀測值之間的歐幾里德距離。

D = pdist(X,Distance) 使用 Distance 指定的方法返回距離。

D = pdist(X,Distance,DistParameter) 使用 Distance 和 DistParameter 指定的方法返回距離。僅當 Distance 是 'seuclidean''minkowski' 或 'mahalanobis' 時,您才能指定 DistParameter

示例

計算歐幾里德距離並將距離向量轉換爲矩陣

計算成對觀測值之間的歐幾里德距離,並使用 squareform 將距離向量轉換爲矩陣。

創建包含三個觀測值和兩個變量的矩陣。

rng('default') % For reproducibility
X = rand(3,2);

計算歐幾里德距離。

D = pdist(X)
D = 1×3

    0.2954    1.0670    0.9448

兩兩距離按 (2,1)、(3,1)、(3,2) 順序排列。通過使用 squareform,您可以輕鬆定位觀測值 i 和 j 之間的距離。

Z = squareform(D)
Z = 3×3

         0    0.2954    1.0670
    0.2954         0    0.9448
    1.0670    0.9448         0

squareform 返回一個對稱矩陣,其中 Z(i,j) 對應於觀測值 i 和 j 之間的兩兩距離。例如,您可以找到觀測值 2 和 3 之間的距離。

Z(2,3)
ans = 0.9448

將 Z 傳遞給 squareform 函數,以重現 pdist 函數的輸出。

y = squareform(Z)
y = 1×3

    0.2954    1.0670    0.9448

squareform 的輸出 y 和 pdist 的輸出 D 是相同的。

計算 Minkowski 距離

創建包含三個觀測值和兩個變量的矩陣。

rng('default') % For reproducibility
X = rand(3,2);

使用默認指數 2 計算 Minkowski 距離。

D1 = pdist(X,'minkowski')
D1 = 1×3

    0.2954    1.0670    0.9448

用指數 1 計算 Minkowski 距離,它等於 City block 距離。

D2 = pdist(X,'minkowski',1)
D2 = 1×3

    0.3721    1.5036    1.3136

D3 = pdist(X,'cityblock')
D3 = 1×3

    0.3721    1.5036    1.3136

使用自定義距離函數計算涉及缺失元素的兩兩距離

定義一個忽略 NaN 值座標的自定義距離函數,並使用該自定義距離函數計算兩兩距離。

創建包含三個觀測值和兩個變量的矩陣。

rng('default') % For reproducibility
X = rand(3,2);

假設第一個觀測值的第一個元素缺失。

X(1,1) = NaN;

計算歐幾里德距離。

D1 = pdist(X)
D1 =

       NaN       NaN    0.9448

如果觀測值 i 或 j 包含 NaN 值,函數 pdist 爲 i 和 j 之間的兩兩距離返回 NaN。因此,D1(1) 和 D1(2),即 (2,1) 和 (3,1) 之間的兩兩距離,是 NaN 值。

定義一個自定義距離函數 naneucdist,該函數忽略 NaN 值的座標,並返回歐幾里德距離。

function D2 = naneucdist(XI,XJ)  
%NANEUCDIST Euclidean distance ignoring coordinates with NaNs
n = size(XI,2);
sqdx = (XI-XJ).^2;
nstar = sum(~isnan(sqdx),2); % Number of pairs that do not contain NaNs
nstar(nstar == 0) = NaN; % To return NaN if all pairs include NaNs
D2squared = nansum(sqdx,2).*n./nstar; % Correction for missing coordinates
D2 = sqrt(D2squared);

將函數句柄作爲輸入參數傳遞給 pdist,以使用 naneucdist 計算該距離。

D2 = pdist(X,@naneucdist)
D2 =

    0.3974    1.1538    0.9448

輸入參數

X - 輸入數據
數值矩陣

輸入數據,指定爲大小是 m×n 的數值矩陣。行對應於單個觀測值,列對應單個變量。

數據類型: single | double

Distance - 距離度量
字符向量 | 字符串標量 | 函數句柄

距離度量,指定爲字符向量、字符串標量或函數句柄,如下表中所述。

說明
'euclidean'

歐幾里德距離(默認值)。

'squaredeuclidean'

歐幾里德距離的平方。(此選項僅用於提高效率。它不滿足三角不等式。)

'seuclidean'

標準化的歐幾里德距離。每個觀測值間座標差都通過除以標準差 S = nanstd(X) 中的對應元素來縮放。使用 DistParameter 爲 S 指定另一個值。

'mahalanobis'

基於 X 的樣本協方差 C = nancov(X) 計算的馬氏距離。使用 DistParameter 爲 C 指定另一個值,其中矩陣 C 是對稱正定矩陣。

'cityblock'

City block 距離。

'minkowski'

Minkowski 距離。默認指數是 2。使用 DistParameter 指定其他指數 P,其中 P 是表示指數的正標量值。

'chebychev'

Chebychev 距離(最大座標差)。

'cosine'

1 減去點之間夾角的餘弦值(視爲向量)。

'correlation'

1 減去點之間的樣本相關性(視爲值序列)。

'hamming'

Hamming 距離,即相異座標所佔的百分比。

'jaccard'

1 減去 Jaccard 係數,即非零相異座標所佔的百分比。

'spearman'

1 減去樣本觀測值之間的 Spearman 秩相關(視爲值序列)。

@distfun

自定義距離函數句柄。距離函數的形式如下

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
其中
  • ZI 是包含單個觀測值的 1×n 向量。

  • ZJ 是包含多個觀測值的 m2×n 矩陣。distfun 必須接受具有任意數目的觀測值的矩陣 ZJ

  • D2 是距離的 m2×1 向量,D2(k) 是觀測值 ZI 和 ZJ(k,:) 之間的距離。

 

對於非稀疏數據,使用內置距離函數計算距離通常比使用函數句柄更快。

有關定義,請參閱距離度量

當您使用 'seuclidean''minkowski' 或 'mahalanobis' 時,您可以指定額外的輸入參數 DistParameter 來控制這些度量。您也可以像使用其他度量一樣來使用這些度量,但這種情況下使用的是 DistParameter 的默認值。

示例: 'minkowski'

DistParameter - 距離度量參數值
正標量 | 數值向量 | 數值矩陣

距離度量參數值,指定爲正標量、數值向量或數值矩陣。僅當您將 Distance 指定爲 'seuclidean''minkowski' 或 'mahalanobis' 時,此參數纔有效。

  • 如果 Distance 是 'seuclidean'DistParameter 是對應於每個維度的縮放因子的向量,指定爲正向量。默認值爲 nanstd(X)

  • 如果 Distance 是 'minkowski'DistParameter 是 Minkowski 距離的指數,指定爲正標量。默認值爲 2。

  • 如果 Distance 是 'mahalanobis'DistParameter 是協方差矩陣,指定爲數值矩陣。默認值爲 nancov(X)DistParameter 必須是對稱正定矩陣。

示例: 'minkowski',3

數據類型: single | double

輸出參數

D - 兩兩距離
數值行向量

兩兩距離,以長度爲 m(m–1)/2 的數值行向量形式返回,對應於成對觀測值,其中 m 是 X 中的觀測值數目。

距離按 (2,1)、(3,1)、...、(m,1)、(3,2)、...、(m,2)、...、(m,m–1) 順序排列,即按列向排列 m×m 距離矩陣的左下三角元素。觀測值 i 和 j 之間的兩兩距離對應於 D((i-1)*(m-i/2)+j-i),其中 i≤j。

您可以使用 squareform 函數將 D 轉換爲對稱矩陣。Z = squareform(D) 返回 m×m 矩陣,其中 Z(i,j) 對應於觀測值 i 和 j 之間的兩兩距離。

如果觀測值 i 或 j 包含 NaN,則對於內置距離函數,D 中的對應值爲 NaN

D 通常在聚類或多維尺度分析中用作相異度矩陣。有關詳細信息,請參閱Hierarchical Clustering以及 cmdscalecophenetlinkagemdscale 和 optimalleaforder 的函數參考頁。這些函數接受 D 作爲輸入參數。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章