Differences with torch.cdist

View Source On Gitee

torch.cdist

torch.cdist(x1, x2, p=2.0, compute_mode='use_mm_for_euclid_dist_if_necessary')

For more information, see torch.cdist.

mindspore.ops.cdist

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

For more information, see mindspore.ops.cdist.

Differences

MindSpore is basically the same as PyTorch, but MindSpore cannot specify whether to compute the Euclidean distance between vector pairs using matrix multiplication.

PyTorch: When the parameter compute_mode is use_mm_for_euclid_dist_if_necessary and the number of row vectors in a batch of x1 or x2 exceeds 25, the Euclidean distance between vector pairs is calculated using matrix multiplication. When compute_mode is use_mm_for_euclid_dist, the Euclidean distance between vector pairs is calculated using matrix multiplication. When compute_mode is donot_use_mm_for_euclid_dist, the Euclidean distances between vector pairs are not computed using matrix multiplication.

MindSpore: No parameter compute_mode to specify whether to use matrix multiplication to compute the Euclidean distance between vector pairs. Euclidean distances between vector pairs are not computed using matrix multiplication on GPU and CPU, while on Ascend, Euclidean distances between vector pairs are computed using matrix multiplication.

Categories

Subcategories

PyTorch

MindSpore

Differences

Parameters

Parameter 1

x1

x1

-

Parameter 2

x2

x2

-

Parameter 3

p

p

-

Parameter 4

compute_mode

-

A parameter in PyTorch specifying whether to calculate Euclidean distances by matrix multiplication, which is not available in MindSpore

Code Example

# PyTorch
import torch
import numpy as np

torch.set_printoptions(precision=7)
x =  torch.tensor(np.array([[1.0, 1.0], [2.0, 2.0]]).astype(np.float32))
y =  torch.tensor(np.array([[3.0, 3.0], [3.0, 3.0]]).astype(np.float32))
output = torch.cdist(x, y, 2.0)
print(output)
# tensor([[2.8284271, 2.8284271],
#         [1.4142135, 1.4142135]])

# MindSpore
import mindspore.numpy as np
from mindspore import Tensor
from mindspore import 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.828427  2.828427 ]
#  [1.4142135 1.4142135]]