PyTorch中cdist和sum函数使用示例详解

 更新时间:2025年05月22日 15:08:43   作者:点云SLAM  
torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwise distance)**的函数,常用于点云处理、图神经网络、相似性度量等场景,本文给大家介绍PyTorch中cdist和sum函数使用,感兴趣的朋友一起看看吧

torch.cdist 是 PyTorch 中用于计算**两个张量之间的成对距离(pairwise distance)**的函数,常用于点云处理、图神经网络、相似性度量等场景。

基本语法

torch.cdist(x1, x2, p=2.0)

参数说明:

参数说明
x1一个形状为 [B, M, D] 或 [M, D] 的张量,表示一组点。
x2一个形状为 [B, N, D] 或 [N, D] 的张量,表示另一组点。
p距离范数,默认 p=2.0 表示欧几里得距离(L2 范数),也可以设为 1.0(曼哈顿距离),或其他值。

输出

输出是一个张量,形状为:

  • 如果 x1.shape = [M, D]x2.shape = [N, D],则输出形状为 [M, N]
  • 每个 (i, j) 位置表示 x1[i]x2[j] 之间的距离。

示例

1. 简单的 2D 欧几里得距离

import torch
x1 = torch.tensor([[0.0, 0.0], [1.0, 0.0]])  # 2个点
x2 = torch.tensor([[0.0, 1.0], [1.0, 1.0]])  # 2个点
dist = torch.cdist(x1, x2, p=2)
print(dist)

输出为:

tensor([[1.0000, 1.4142],
        [1.4142, 1.0000]])

即:

  • x1[0] 与 x2[0] 的距离为 1;
  • x1[0] 与 x2[1] 的距离为 sqrt(2),等等。

2. 批量形式(3D Tensor)

x1 = torch.rand(2, 5, 3)  # batch=2, 每组5个3D点
x2 = torch.rand(2, 4, 3)  # batch=2, 每组4个3D点
out = torch.cdist(x1, x2)  # 输出形状为 [2, 5, 4]

3. 使用不同范数

torch.cdist(x1, x2, p=1)   # 曼哈顿距离
torch.cdist(x1, x2, p=2)   # 欧几里得距离(默认)
torch.cdist(x1, x2, p=inf) # 最大维度差

注意事项

  • x1 和 x2 的最后一维(特征维度)必须相同。
  • p=2 时效率最高,其他范数可能会慢一些。
  • 如果两个张量都很大,这个操作可能非常耗显存。

应用场景举例

  • 点云之间距离计算(如 ISS、FPFH、ICP)
  • 匹配点对的距离图构建
  • KNN 查询
  • 图构造(邻接矩阵、相容性矩阵)

torch.sum 是 PyTorch 中用于对张量元素进行求和的函数,功能类似于 NumPy 中的 np.sum,但可以更灵活地选择维度进行操作。

基本用法

torch.sum(input, dim=None, keepdim=False)

参数说明:

  • input:要进行求和的张量;
  • dim(可选):指定在哪个维度上进行求和;
  • keepdim(可选):布尔值,是否保留被求和的维度(默认不保留)。

示例讲解

示例 1:对所有元素求和

x = torch.tensor([[1, 2], [3, 4]])
torch.sum(x)
# 输出:tensor(10)

示例 2:指定维度求和

x = torch.tensor([[1, 2], [3, 4]])
torch.sum(x, dim=0)  # 按列求和:1+3, 2+4
# 输出:tensor([4, 6])
torch.sum(x, dim=1)  # 按行求和:1+2, 3+4
# 输出:tensor([3, 7])

示例 3:保留维度

x = torch.tensor([[1, 2], [3, 4]])
torch.sum(x, dim=1, keepdim=True)
# 输出:tensor([[3], [7]])

到此这篇关于PyTorch中cdist和sum函数使用示例详解的文章就介绍到这了,更多相关PyTorch cdist和sum函数使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 为什么选择python编程语言入门黑客攻防 给你几个理由!

    为什么选择python编程语言入门黑客攻防 给你几个理由!

    为什么选择python编程语言入门黑客攻防,小编今天给你几个理由!Python语言的优点、Python黑客攻击优点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • Python读取中文路径出现乱码的问题解决

    Python读取中文路径出现乱码的问题解决

    本文主要介绍了Python读取中文路径出现乱码的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Python中的对象,方法,类,实例,函数用法分析

    Python中的对象,方法,类,实例,函数用法分析

    这篇文章主要介绍了Python中的对象,方法,类,实例,函数用法,从面向对象的角度分析了对象,方法,类,实例,函数等的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • Django 请求Request的具体使用方法

    Django 请求Request的具体使用方法

    这篇文章主要介绍了Django 请求Request的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • wxPython实现列表增删改查功能

    wxPython实现列表增删改查功能

    这篇文章主要为大家详细介绍了wxPython实现列表增删改查功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • Python hashlib常见摘要算法详解

    Python hashlib常见摘要算法详解

    这篇文章主要介绍了Python hashlib常见摘要算法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 用Python的urllib库提交WEB表单

    用Python的urllib库提交WEB表单

    上次实现的校园网IP网关登录器其中一个关键部分就是提交登录网页的表单,下面是我的Python实现代码
    2009-02-02
  • 用Python编写分析Python程序性能的工具的教程

    用Python编写分析Python程序性能的工具的教程

    这篇文章主要介绍了用Python编写分析Python程序性能的工具教程,包括了对内存泄漏等常见问题的检测方法,需要的朋友可以参考下
    2015-04-04
  • Python调用GPU算力的实现步骤

    Python调用GPU算力的实现步骤

    本文介绍了在Python中调用GPU算力的基本步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-03-03
  • Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    Python数据结构与算法之图的广度优先与深度优先搜索算法示例

    这篇文章主要介绍了Python数据结构与算法之图的广度优先与深度优先搜索算法,结合实例形式分析了图的广度优先与深度优先搜索算法原理与相关实现技巧,需要的朋友可以参考下
    2017-12-12

最新评论