Differences with torch.cdist
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]]