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 作为输入参数。

 

 

你可能感兴趣的:(MATLAB)