scipy.spatial.distance.cdist¶
- scipy.spatial.distance.cdist(XA, XB, metric='euclidean', *, out=None, **kwargs)[源代码]¶
计算两组输入中每对之间的距离。
有关常见的调用约定,请参阅注释。
- 参数
- XAarray_like
一个 \(m_A\) 通过 \(n\) 数组 \(m_A\) 原始观测数据在一个 \(n\) -维度空间。输入转换为浮点类型。
- XBarray_like
一个 \(m_B\) 通过 \(n\) 数组 \(m_B\) 原始观测数据在一个 \(n\) -维度空间。输入转换为浮点类型。
- metric字符串或可调用,可选
要使用的距离度量。如果是字符串,则距离函数可以是‘braycurtis’,‘堪培拉’,‘Chebyshev’,‘cityblock’,‘Correlation’,‘cosine’,‘Dice’,‘Euclides’,‘Hamming’,‘Jaccard’,‘jensenshannon’,‘kulsinski’,‘kulczynski 1’,‘Mahalanobis’,‘Matching’,‘Minkowski’,‘rogerstanimoto’,
- **kwargsDICT,可选
的额外参数 metric :有关所有可能参数的列表,请参阅每个指标文档。
一些可能的论点:
p:适用于Minkowski的标量p-范数,加权和未加权。默认值:2。
W:array_like支持权重的指标的权重向量(例如,Minkowski)。
V:类似数组的标准化欧几里得的方差向量。默认值:var(vstack( [Xa、Xb] ),轴=0,ddof=1)
VI:类似数组的马氏协方差矩阵的逆。默认值:inv(cov(vstack( [Xa、Xb] .T)).T
输出:对输出数组进行扫描如果不是无,则距离矩阵Y存储在此数组中。
- 退货
- Yndarray
A \(m_A\) 通过 \(m_B\) 返回距离矩阵。对于每个 \(i\) 和 \(j\) ,公制
dist(u=XA[i], v=XB[j])
被计算并存储在 \(ij\) 这个条目。
- 加薪
- ValueError
如果出现以下情况,则会引发异常 XA 和 XB 列数不同。
注意事项
以下是常见的调用约定:
Y = cdist(XA, XB, 'euclidean')
计算 \(m\) 使用欧几里得距离(2范数)作为点之间的距离度量的点。这些点的排列方式如下 \(m\) \(n\) 矩阵X中的维行向量。
Y = cdist(XA, XB, 'minkowski', p=2.)
Computes the distances using the Minkowski distance \(||u-v||_p\) (\(p\)-norm) where \(p \geq 1\).
Y = cdist(XA, XB, 'cityblock')
计算点之间的城市挡路或曼哈顿距离。
Y = cdist(XA, XB, 'seuclidean', V=None)
计算标准化的欧几里德距离。两个n维向量之间的标准化欧氏距离
u
和v
是\[\sqrt{\sum {(u_i-v_i)^2 / V[x_i]}}.\]V是方差向量;V [i] 是对这些点的所有第i个分量计算的方差。如果未通过,则会自动计算。
Y = cdist(XA, XB, 'sqeuclidean')
计算欧几里德距离的平方。 \(||u-v||_2^2\) 在矢量之间。
Y = cdist(XA, XB, 'cosine')
计算矢量u和v之间的余弦距离,
\[1 - \frac{u \cdot v} {{||u||}_2 {||v||}_2}\]哪里 \(||*||_2\) 是其论据的2范数
*
,以及 \(u \cdot v\) 是的点积 \(u\) 和 \(v\) 。Y = cdist(XA, XB, '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\) 。
Y = cdist(XA, XB, 'hamming')
计算归一化汉明距离,或两个n向量之间这些向量元素的比例。
u
和v
这一点并不一致。为了节省内存,矩阵X
可以是布尔类型。Y = cdist(XA, XB, 'jaccard')
计算点之间的Jaccard距离。给出两个矢量,
u
和v
,Jaccard距离就是这些元素的比例u[i]
和v[i]
在它们中至少有一个是非零的情况下,这一点是不一致的。Y = cdist(XA, XB, 'jensenshannon')
计算两个概率数组之间的Jensen-Shannon距离。给定两个概率向量, \(p\) 和 \(q\) ,Jensen-Shannon距离为
\[\sqrt{\frac{D(p\并行m)+D(q\并行m)}{2}}\]哪里 \(m\) 是按点表示的平均值 \(p\) 和 \(q\) 和 \(D\) 就是库尔巴克-莱布勒发散。
Y = cdist(XA, XB, 'chebyshev')
计算点之间的切比雪夫距离。两个n维向量之间的切比雪夫距离
u
和v
是它们各自元素之间的最大范数距离。更准确地说,距离是由以下公式给出的\[D(u,v)=\max_i{|u_i-v_i|}。\]Y = cdist(XA, XB, 'canberra')
计算点之间的堪培拉距离。两点之间的堪培拉距离
u
和v
是\[D(u,v)=\sum_i\frac{|u_i-v_i|} { |u_i| + |v_i| }。\]Y = cdist(XA, XB, 'braycurtis')
计算点之间的Bray-Curtis距离。两点间的Bray-Curtis距离
u
和v
是\[D(u,v)=\frac{\sum_i(|u_i-v_i|)} {\sum_i(|u_i+v_i|)}\]Y = cdist(XA, XB, 'mahalanobis', VI=None)
计算点之间的马氏距离。两点间的马氏距离
u
和v
是 \(\sqrt{{(u-v)(1/V)(u-v)^T}}\) 哪里 \((1/V)\) (VI
变量)是逆协方差。如果VI
不是没有,VI
将用作逆协方差矩阵。Y = cdist(XA, XB, 'yule')
计算布尔向量之间的Yule距离。(请参阅
yule
功能文档)Y = cdist(XA, XB, 'matching')
“汉明”的同义词。
Y = cdist(XA, XB, 'dice')
计算布尔向量之间的骰子距离。(请参阅
dice
功能文档)Y = cdist(XA, XB, 'kulsinski')
计算布尔向量之间的Kulsinski距离。(请参阅
kulsinski
功能文档)Y = cdist(XA, XB, 'rogerstanimoto')
计算布尔向量之间的Rogers-TAnimoto距离。(请参阅
rogerstanimoto
功能文档)Y = cdist(XA, XB, 'russellrao')
计算布尔向量之间的Russell-Rao距离。(请参阅
russellrao
功能文档)Y = cdist(XA, XB, 'sokalmichener')
计算布尔向量之间的Sokal-Michener距离。(请参阅
sokalmichener
功能文档)Y = cdist(XA, XB, 'sokalsneath')
计算向量之间的Sokal-Sneath距离。(请参阅
sokalsneath
功能文档)Y = cdist(XA, XB, 'wminkowski', p=2., w=w)
计算矢量之间的加权Minkowski距离。(请参阅
wminkowski
功能文档)“wminkowski”已弃用,将在本网站1.8.0中删除。用‘Minkowski’代替。
Y = cdist(XA, XB, f)
使用用户提供的2元函数f计算X中所有矢量对之间的距离。例如,矢量之间的欧几里得距离可以计算如下:
dm = cdist(XA, XB, lambda u, v: np.sqrt(((u-v)**2).sum()))
请注意,您应该避免传递对此库中定义的距离函数之一的引用。例如,::
dm = cdist(XA, XB, sokalsneath)
将使用Python函数计算X中矢量之间的成对距离
sokalsneath
。这将导致调用sokalkinath \({{n \choose 2}}\) 倍,这是低效的。相反,优化的C版本效率更高,我们使用以下语法调用它:dm = cdist(XA, XB, 'sokalsneath')
示例
找出四个二维坐标之间的欧几里得距离:
>>> 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') 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. ]])
找出从三维点到单位立方体角点的曼哈顿距离:
>>> a = np.array([[0, 0, 0], ... [0, 0, 1], ... [0, 1, 0], ... [0, 1, 1], ... [1, 0, 0], ... [1, 0, 1], ... [1, 1, 0], ... [1, 1, 1]]) >>> b = np.array([[ 0.1, 0.2, 0.4]]) >>> distance.cdist(a, b, 'cityblock') array([[ 0.7], [ 0.9], [ 1.3], [ 1.5], [ 1.5], [ 1.7], [ 2.1], [ 2.3]])