计算空间距离:scipy.spatial.distance.cdist()

scipy.spatial.distance.cdist(XA, XB, metric='euclidean', *, out=None, **kwargs)

计算两个输入集合中每一对之间的距离。

参数:

array_like:像数组的类型,只包含使用从零开始,且自然递增的整数做键名,并且定义了length表示元素个数的对象,我们就认为它是类数组对象。

  • XA:array_like

    在 n 维空间中一个 mA∗nm_A * n 的 mAm_A 原始观测数组。输入转换为浮点型。

  • XB:array_like

    在 n 维空间中一个 mB∗nm_B * n​ 的 mBm_B​ 原始观测数组。输入转换为浮点型。

  • metric:str or callable, optional ( 可调用或可选择的字符串 )

    要使用的距离度量。如果一个字符串,距离函数可以是 ‘ braycurtis’,‘ canberra’,‘ chebyshev’,‘ cityblock’,‘ correlation’,‘ cosine’,‘ dice’,‘ euclidean’,‘ hamming’,‘ jaccard’,‘ jensenshannon’,‘ kulsinski’,‘ mahalanobis’,‘ matching’,‘ minkowski’,‘ rogerstanimoto’,‘ russelll’,‘ seuclidean’,‘ sokalmichener’,‘ sokalath’,‘ euclidean’,‘ sqlkowski’,‘ wminkole’。

  • **kwargs:dict, optional (可选的字典)

    度量的额外参数:参考每个度量文档获得所有可能参数的列表。

    一些可能的参数:

    标量( P ):适用于 Minkowski 的 p 范数,加权和不加权。默认值:2。

    权重( w ):类数组的权重向量,用于支持权重的度量(例如,Minkowski)。

    向量( V ):类数组的标准化欧几里德的方差向量。缺省值:var(vstack([XA,XB]), axis = 0, ddof = 1)。

    逆矩阵( VI ):马氏协方差矩阵的逆矩阵。默认值:inv(cov(vstack([XA, XB].T))).T

返回值:

  • 返回值类型:ndarray

    返回一个 mA∗mBm_A * m_B 的距离矩阵。对于每个 ii 和 jj​ ,度量 dist(u=XA[i], v=XB[j])被计算并保存在第 ijij 个条目中。

备注:

​ 如果 XA 和 XB 的列数不相同,则引发异常。

scipy.spatial.distance.cdist — SciPy v1.7.1 Manual

代码举例:

1
2
3
4
5
6
from scipy.spatial import distance
coords = [(35.0456, -85.2672),
(35.1174, -89.9711),
(35.9728, -83.9422),
(36.1667, -86.7833)]
distance.cdist(coords, coords, 'euclidean')

运行结果:

1
2
3
4
array([[ 0.    ,  4.7044,  1.6172,  1.8856],
[ 4.7044, 0. , 6.0893, 3.3561],
[ 1.6172, 6.0893, 0. , 2.8477],
[ 1.8856, 3.3561, 2.8477, 0. ]])