cdist¶
- paddle. cdist ( x, y, p=2.0, compute_mode='use_mm_for_euclid_dist_if_necessary', name=None ) [源代码] ¶
计算两组输入集合中每对之间的 p 范数距离。
当 p∈(0,∞) 时,该函数等同于 scipy.spatial.distance.cdist(input,'minkowski', p=p) ; 当 p=0 时,等同于 scipy.spatial.distance.cdist(input, 'hamming') * M ; 当 p=∞ 时,最接近的是 scipy.spatial.distance.cdist(xn, lambda x, y: np.abs(x - y).max()) 。
参数¶
x (Tensor) - 形状为 B×P×M 的 Tensor。
y (Tensor) - 形状为 B×R×M 的 Tensor。
p (float, 可选) - 计算每个向量对之间的 p 范数距离的值。默认值为 2.0。
compute_mode (str, 可选) - 选择计算模式。
use_mm_for_euclid_dist_if_necessary
: 对于 p = 2.0 且 P > 25, R > 25 ,如果可能,将使用矩阵乘法计算欧氏距离。
use_mm_for_euclid_dist
: 对于 p = 2.0 ,使用矩阵乘法计算欧几里得距离。
use_loop_for_euclid_dist
: 不使用矩阵乘法计算欧几里得距离。默认值为
use_mm_for_euclid_dist_if_necessary
。name (str, 可选) - 具体用法请参见 Name ,一般无需设置,默认值为 None。
返回¶
Tensor,dtype 与输入张量相同。 如果 x 的形状为 B×P×M,y 的形状为 B×R×M,则输出的形状为 B×P×R。
代码示例¶
>>> import paddle
>>> x = paddle.to_tensor([[0.9041, 0.0196], [-0.3108, -2.4423], [-0.4821, 1.059]], dtype=paddle.float32)
>>> y = paddle.to_tensor([[-2.1763, -0.4713], [-0.6986, 1.3702]], dtype=paddle.float32)
>>> distance = paddle.cdist(x, y)
>>> print(distance)
Tensor(shape=[3, 2], dtype=float32, place=Place(cpu), stop_gradient=True,
[[3.11927032, 2.09589314],
[2.71384072, 3.83217239],
[2.28300953, 0.37910119]])