torch.cdist¶
-
torch.
cdist
(x1: torch.Tensor, x2: torch.Tensor, p: float = 2.0, compute_mode: str = 'use_mm_for_euclid_dist_if_necessary') → torch.Tensor[source]¶ Computes batched the p-norm distance between each pair of the two collections of row vectors.
- Parameters
x1 (Tensor) – input tensor of shape .
x2 (Tensor) – input tensor of shape .
p – p value for the p-norm distance to calculate between each vector pair .
compute_mode – ‘use_mm_for_euclid_dist_if_necessary’ - will use matrix multiplication approach to calculate euclidean distance (p = 2) if P > 25 or R > 25 ‘use_mm_for_euclid_dist’ - will always use matrix multiplication approach to calculate euclidean distance (p = 2) ‘donot_use_mm_for_euclid_dist’ - will never use matrix multiplication approach to calculate euclidean distance (p = 2) Default: use_mm_for_euclid_dist_if_necessary.
If x1 has shape and x2 has shape then the output will have shape .
This function is equivalent to scipy.spatial.distance.cdist(input,’minkowski’, p=p) if . When it is equivalent to scipy.spatial.distance.cdist(input, ‘hamming’) * M. When , the closest scipy function is scipy.spatial.distance.cdist(xn, lambda x, y: np.abs(x - y).max()).
Example
>>> 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]])