pdist
成對觀測值之間的兩兩距離
語法
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' |
標準化的歐幾里德距離。每個觀測值間座標差都通過除以標準差 |
'mahalanobis' |
基於 |
'cityblock' |
City block 距離。 |
'minkowski' |
Minkowski 距離。默認指數是 2。使用 |
'chebychev' |
Chebychev 距離(最大座標差)。 |
'cosine' |
1 減去點之間夾角的餘弦值(視爲向量)。 |
'correlation' |
1 減去點之間的樣本相關性(視爲值序列)。 |
'hamming' |
Hamming 距離,即相異座標所佔的百分比。 |
'jaccard' |
1 減去 Jaccard 係數,即非零相異座標所佔的百分比。 |
'spearman' |
1 減去樣本觀測值之間的 Spearman 秩相關(視爲值序列)。 |
@ |
自定義距離函數句柄。距離函數的形式如下 function D2 = distfun(ZI,ZJ) % calculation of distance ...其中
對於非稀疏數據,使用內置距離函數計算距離通常比使用函數句柄更快。 |
有關定義,請參閱距離度量。
當您使用 '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以及 cmdscale
、cophenet
、linkage
、mdscale
和 optimalleaforder
的函數參考頁。這些函數接受 D
作爲輸入參數。