scipy.spatial.distance.pdist

scipy.spatial.distance.pdist(X, metric='euclidean', *, out=None, **kwargs)[源代码]

n维空间中观测之间的成对距离。

有关常见的调用约定,请参阅注释。

参数
Xarray_like

n维空间中m个原始观测的m×n阵列。

metric字符串或函数,可选

要使用的距离度量。距离函数可以是‘braycurtis’、‘堪培拉’、‘Chebyshev’、‘CITYBLOCK’、‘CORATION’、‘COSING’、‘DICE’、‘欧几里得’、‘Hamming’、‘Jaccard’、‘jensenshannon’、‘kulsinski’、‘kulczynsk1’、‘Mahalanobis’、‘Matching’、‘Minkowski’、‘rogerstanimoto’、‘russellimoto’、‘jensenshannon’、‘kulsinski’、‘kulczynski’、‘Mahalanobis’、‘Matching’、‘Minkowski’、‘rogerstanimoto

**kwargsDICT,可选

的额外参数 metric :有关所有可能参数的列表,请参阅每个指标文档。

一些可能的论点:

p:适用于Minkowski的标量p-范数,加权和未加权。默认值:2。

W:ndarray支持权重的指标的权重向量(例如,Minkowski)。

V:n表示标准化欧几里得的方差向量。默认值:var(X,轴=0,ddof=1)

VI:ndarray马氏协方差矩阵的逆。默认值:inv(cov(X.T)).T

出局:ndarray。输出数组如果不是无,则压缩距离矩阵Y存储在该数组中。

退货
Yndarray

返回一个压缩距离矩阵Y。 \(i\)\(j\) (其中 \(i<j<m\) ),其中m是原始观测值的数量。指标 dist(u=X[i], v=X[j]) 被计算并存储在条目中 m * i + j - ((i + 2) * (i + 1)) // 2

参见

squareform

在压缩距离矩阵和平方距离矩阵之间进行转换。

注意事项

看见 squareform 有关如何计算此条目的索引或如何将压缩距离矩阵转换为冗余方阵的信息,请参见。

以下是常见的调用约定。

  1. Y = pdist(X, 'euclidean')

    使用欧几里得距离(2范数)作为点之间的距离度量来计算点之间的距离。这些点被布置为矩阵X中的m个n维行向量。

  2. Y = pdist(X, 'minkowski', p=2.)

    使用Minkowski距离计算距离 \(||u-v||_p\) (P-范数)其中 \(p \geq 1\)

  3. Y = pdist(X, 'cityblock')

    计算点之间的城市挡路或曼哈顿距离。

  4. Y = pdist(X, 'seuclidean', V=None)

    计算标准化的欧几里德距离。两个n维向量之间的标准化欧氏距离 uv

    \[\sqrt{\sum {(u_i-v_i)^2 / V[x_i]}}\]

    V是方差向量;V [i] 是对这些点的所有第i个分量计算的方差。如果未通过,则会自动计算。

  5. Y = pdist(X, 'sqeuclidean')

    计算欧几里德距离的平方。 \(||u-v||_2^2\) 在矢量之间。

  6. Y = pdist(X, 'cosine')

    计算矢量u和v之间的余弦距离,

    \[1 - \frac{u \cdot v} {{||u||}_2 {||v||}_2}\]

    哪里 \(||*||_2\) 是其论据的2范数 * ,以及 \(u \cdot v\) 是的点积 uv

  7. Y = pdist(X, 'correlation')

    计算向量u和v之间的相关距离。这是

    \[1-\frac{(u-\bar{u})\cdot(v-\bar{v})} {{||(u-\bar{u})||}_2{||(v-\bar{v})||}_2}\]

    哪里 \(\bar{{v}}\) 是向量v的元素的平均值,并且 \(x \cdot y\) 是的点积 \(x\)\(y\)

  8. Y = pdist(X, 'hamming')

    计算归一化汉明距离,或两个n向量之间这些向量元素的比例。 uv 这一点并不一致。为了节省内存,矩阵 X 可以是布尔类型。

  9. Y = pdist(X, 'jaccard')

    计算点之间的Jaccard距离。给出两个矢量, uv ,Jaccard距离就是这些元素的比例 u[i]v[i] 这一点不同。

  10. Y = pdist(X, 'jensenshannon')

    计算两个概率数组之间的Jensen-Shannon距离。给定两个概率向量, \(p\)\(q\) ,Jensen-Shannon距离为

    \[\sqrt{\frac{D(p\并行m)+D(q\并行m)}{2}}\]

    哪里 \(m\) 是按点表示的平均值 \(p\)\(q\)\(D\) 就是库尔巴克-莱布勒发散。

  11. Y = pdist(X, 'chebyshev')

    计算点之间的切比雪夫距离。两个n维向量之间的切比雪夫距离 uv 是它们各自元素之间的最大范数距离。更准确地说,距离是由以下公式给出的

    \[D(u,v)=\max_i{|u_i-v_i|}\]
  12. Y = pdist(X, 'canberra')

    计算点之间的堪培拉距离。两点之间的堪培拉距离 uv

    \[D(u,v)=\sum_i\frac{|u_i-v_i|} { |u_i| + |v_i| }\]
  13. Y = pdist(X, 'braycurtis')

    计算点之间的Bray-Curtis距离。两点间的Bray-Curtis距离 uv

    \[D(u,v)=\frac{\sum_i{|u_i-v_i|}} {\sum_i{|u_i+v_i|}}\]
  14. Y = pdist(X, 'mahalanobis', VI=None)

    计算点之间的马氏距离。两点间的马氏距离 uv\(\sqrt{{(u-v)(1/V)(u-v)^T}}\) 哪里 \((1/V)\) ( VI 变量)是逆协方差。如果 VI 不是没有, VI 将用作逆协方差矩阵。

  15. Y = pdist(X, 'yule')

    计算每对布尔向量之间的Yule距离。(参见yule函数文档)

  16. Y = pdist(X, 'matching')

    “汉明”的同义词。

  17. Y = pdist(X, 'dice')

    计算每对布尔向量之间的骰子距离。(参见骰子函数文档)

  18. Y = pdist(X, 'kulsinski')

    计算每对布尔向量之间的Kulsinski距离。(参见kulsinski函数文档)

  19. Y = pdist(X, 'rogerstanimoto')

    计算每对布尔向量之间的Rogers-TAnimoto距离。(参见rogerstanimoto函数文档)

  20. Y = pdist(X, 'russellrao')

    计算每对布尔向量之间的Russell-Rao距离。(参见russellrao函数文档)

  21. Y = pdist(X, 'sokalmichener')

    计算每对布尔向量之间的Sokal-Michener距离。(参见sokalmichener函数文档)

  22. Y = pdist(X, 'sokalsneath')

    计算每对布尔向量之间的Sokal-Sneath距离。(参见sokalkinath函数文档)

  23. Y = pdist(X, 'kulczynski1')

    计算每对布尔向量之间的Kulczynski 1距离。(参见kulczynski 1函数文档)

  24. Y = pdist(X, 'wminkowski', p=2, w=w)

    计算每对矢量之间的加权Minkowski距离。(请参阅wminkowski函数文档)

    “wminkowski”已弃用,将在本网站1.8.0中删除。用‘Minkowski’代替。

  25. Y = pdist(X, f)

    使用用户提供的2元函数f计算X中所有矢量对之间的距离。例如,矢量之间的欧几里得距离可以计算如下:

    dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))
    

    请注意,您应该避免传递对此库中定义的距离函数之一的引用。例如,::

    dm = pdist(X, sokalsneath)
    

    将使用Python函数sokalkinath计算X中矢量之间的成对距离。这将导致调用sokalkinath \({{n \choose 2}}\) 倍,这是低效的。相反,优化的C版本效率更高,我们使用以下语法调用它。::

    dm = pdist(X, 'sokalsneath')