当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy distance.pdist用法及代码示例


本文简要介绍 python 语言中 scipy.spatial.distance.pdist 的用法。

用法:

scipy.spatial.distance.pdist(X, metric='euclidean', *, out=None, **kwargs)#

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

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

参数

X array_like

在 n 维空间中由 m 个原始观测值组成的 m × n 数组。

metric str 或函数,可选

要使用的距离度量。距离函数可以是‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘cityblock’, ‘correlation’, ‘cosine’, ‘dice’, ‘euclidean’, ‘hamming’, ‘jaccard’, ‘jensenshannon’、‘kulczynski1’, ‘mahalanobis’、‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’。

out ndarray

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

**kwargs 字典,可选

指标的额外参数:请参阅每个指标文档以获取所有可能参数的列表。

一些可能的论点:

p:标量 p-norm 申请 Minkowski,加权和未加权。默认值:2。

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

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

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

返回

Y ndarray

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

注意

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

以下是常见的调用约定。

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

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

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

    使用 Minkowski 距离 ( -norm) 计算距离,其中 (请注意,如果 ,这只是 quasi-metric )。

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

    计算点之间的城市街区或曼哈顿距离。

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

    计算标准化欧几里得距离。两个n-vectorsuv之间的标准化欧几里得距离是

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

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

    计算向量之间的平方欧几里得距离

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

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

    其中 是其参数 * 的 2 范数,而 uv 的点积。

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

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

    其中 是向量 v 的元素的平均值,而 的点积。

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

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

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

    计算点之间的 Jaccard 距离。给定两个向量 uv ,Jaccard 距离是那些不同意的元素的比例 u[i]v[i]

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

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

    其中 的逐点均值, 是Kullback-Leibler 散度。

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

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

  12. Y = pdist(X, 'canberra')

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

  13. Y = pdist(X, 'braycurtis')

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

  14. Y = pdist(X, 'mahalanobis', VI=None)

    计算点之间的马氏距离。 uv 两点之间的马氏距离为 ,其中 (VI 变量)是逆协方差。如果VI 不是None,则VI 将用作逆协方差矩阵。

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

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

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

    ‘hamming’ 的同义词。

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

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

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

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

  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 距离。 (参见 sokalsneath 函数文档)

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

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

  24. Y = pdist(X, f)

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

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

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

    dm = pdist(X, sokalsneath)

    将使用 Python 函数 sokalsneath 计算 X 中向量之间的成对距离。这将导致 sokalsneath 被调用 次,这是低效的。相反,优化的 C 版本更加高效,我们使用以下语法来调用它:

    dm = pdist(X, 'sokalsneath')

例子

>>> import numpy as np
>>> from scipy.spatial.distance import pdist

x 是三维空间中五个点的数组。

>>> x = np.array([[2, 0, 2], [2, 2, 3], [-2, 4, 5], [0, 1, 9], [2, 2, 4]])

pdist(x) 不带附加参数计算 10 个成对欧几里德距离:

>>> pdist(x)
array([2.23606798, 6.40312424, 7.34846923, 2.82842712, 4.89897949,
       6.40312424, 1.        , 5.38516481, 4.58257569, 5.47722558])

以下使用 p = 3.5 计算成对 Minkowski 距离:

>>> pdist(x, metric='minkowski', p=3.5)
array([2.04898923, 5.1154929 , 7.02700737, 2.43802731, 4.19042714,
       6.03956994, 1.        , 4.45128103, 4.10636143, 5.0619695 ])

成对的城市街区或曼哈顿距离:

>>> pdist(x, metric='cityblock')
array([ 3., 11., 10.,  4.,  8.,  9.,  1.,  9.,  7.,  8.])

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.spatial.distance.pdist。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。