torch.cdist

torch.cdist(x1, x2, p=2.0, compute_mode='use_mm_for_euclid_dist_if_necessary')[源代码]

计算两个行向量集合中每对向量的批处理p-范数距离。

参数
  • x1 (Tensor) – 形状为 $B \times P \times M$ 的输入张量。

  • x2 (Tensor) – 形状为 $B \times R \times M$ 的输入张量。

  • p (float) – 计算每对向量之间 p-范数距离的 p 值 $\in [0, \infty]$

  • compute_mode (str) – ‘use_mm_for_euclid_dist_if_necessary’:如果 P > 25 或 R > 25,则使用矩阵乘法方法计算欧几里得距离(p = 2);‘use_mm_for_euclid_dist’:总是使用矩阵乘法方法计算欧几里得距离(p = 2);‘donot_use_mm_for_euclid_dist’:从不使用矩阵乘法方法计算欧几里得距离(p = 2)。默认值:use_mm_for_euclid_dist_if_necessary。

返回类型

Tensor

如果 x1 的形状为 $B \times P \times M$,x2 的形状为 $B \times R \times M$,那么输出的形状将会是 $B \times P \times R$

此函数等同于scipy.spatial.distance.cdist(input,'minkowski', p=p),当$p \in (0, \infty)$时。当$p = 0$时,它等同于scipy.spatial.distance.cdist(input, 'hamming') * M。而当$p = \infty$时,最接近的 scipy 函数是scipy.spatial.distance.cdist(xn, lambda x, y: np.abs(x - y).max())

示例

>>> a = torch.tensor([[0.9041, 0.0196], [-0.3108, -2.4423], [-0.4821, 1.059]])
>>> a
tensor([[ 0.9041,  0.0196],
        [-0.3108, -2.4423],
        [-0.4821,  1.0590]])
>>> b = torch.tensor([[-2.1763, -0.4713], [-0.6986, 1.3702]])
>>> b
tensor([[-2.1763, -0.4713],
        [-0.6986,  1.3702]])
>>> torch.cdist(a, b, p=2)
tensor([[3.1193, 2.0959],
        [2.7138, 3.8322],
        [2.2830, 0.3791]])
本页目录