mindspore.ops.cdist

mindspore.ops.cdist(x1, x2, p=2.0)[source]

Computes p-norm distance between each pair of row vectors of two input Tensors.

Note

On Ascend, the supported dtypes are float16 and float32. On CPU, the supported dtypes are float16 and float32. On GPU, the supported dtypes are float32 and float64.

Parameters
  • x1 (Tensor) – Input tensor of shape \((B, P, M)\). Letter \(B\) represents 0 or positive int number. When \(B\) is equal to 0, it means this dimension can be ignored, i.e. shape of the tensor is \((P, M)\).

  • x2 (Tensor) – Input tensor of shape \((B, R, M)\), has the same dtype as x1.

  • p (float, optional) – P value for the p-norm distance to calculate between each vector pair, P ∈ [0,∞]. Default: 2.0 .

Returns

Tensor, p-norm distance, has the same dtype as x1, its shape is \((B, P, R)\).

Raises
  • TypeError – If x1 or x2 is not Tensor.

  • TypeError – If dtype of x1 or x2 is not listed in the “Note” above.

  • TypeError – If p is not float32.

  • ValueError – If p is negative.

  • ValueError – If dimension of x1 is not the same as x2.

  • ValueError – If dimension of x1 or x2 is neither 2 nor 3.

  • ValueError – If the batch shape of x1 is not the same as the shape of x2.

  • ValueError – If the number of columns of x1 is not the same as that of x2.

Supported Platforms:

Ascend GPU CPU

Examples

>>> import numpy as np
>>> from mindspore import Tensor, ops
>>> x = Tensor(np.array([[[1.0, 1.0], [2.0, 2.0]]]).astype(np.float32))
>>> y = Tensor(np.array([[[3.0, 3.0], [3.0, 3.0]]]).astype(np.float32))
>>> output = ops.cdist(x, y, 2.0)
>>> print(output)
[[[2.8284273 2.8284273]
  [1.4142137 1.4142137]]]