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 torchx1 = 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) # 最大维度差

注意事项

  • x1x2 的最后一维(特征维度)必须相同。
  • 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]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能视觉检测技术:制造业质量管控的“隐形守护者”

在工业4.0浪潮的推动下,制造业正经历一场以智能化为核心的变革。传统人工质检模式因效率低、误差率高、成本高昂等问题,逐渐难以满足现代生产对高精度、高速度的需求。智能视觉检测技术作为人工智能与机器视觉融合的产物,正成为制造业质量管控…

水浒后传-暹罗国建立新国家的故事

第一节《怒海余生》 李俊率领残部穿越台风海域,在暹罗湾遭遇葡萄牙舰队突袭。童猛为掩护船队突围,驾驶火船与敌舰同归于尽,留下最后的忠义绝唱。 第二节《血染王城》 李俊与暹罗旧贵族势力在曼谷河畔展开决战。中原阵法与暹罗象兵碰撞出惊心…

1.portainer

容器可视化工具 商业版Business、社区版Community docker容器部署portainer,对外暴露端口9443是一个自签名的证书端口。还有另外一个暴露的端口8000。 volume 要想看得到,需要通过 portainer可视化界面看到volume,就必须使用: d…

使用Starrocks制作拉链表

5月1日向ods_order_info插入3条数据: CREATE TABLE ods_order_info(dt string,id string COMMENT 订单编号,total_amount decimal(10,2) COMMENT 订单金额 ) PRIMARY KEY(dt, id) PARTITION BY (dt) DISTRIBUTED BY HASH(id) PROPERTIES ( "replication_num&q…

Linux下Docker使用阿里云镜像加速器

在中国大陆环境中配置 Docker 使用阿里云镜像加速器,并确保通过 Clash 代理访问 Docker Hub 我这里用的Debian12。 步骤 1:获取阿里云镜像加速器地址 登录阿里云容器镜像服务控制台:(qinyang.wang) 网址:阿里云登录 - 欢迎登录阿…

Electron 后台常驻服务实现(托盘 + 开机自启)

基于 electron-vite-vue 项目结构 本篇将详细介绍如何为 Electron 应用实现后台常驻运行,包括: ✅ 创建系统托盘图标(Tray)✅ 支持点击托盘菜单控制窗口显示/退出✅ 实现开机自启功能(Auto Launch) &#…

opencv的直方图

理解并运用 OpenCV 中的图像直方图 📊🖼️ 图像直方图是计算机视觉和图像处理中一种基本且强大的工具,它提供了图像像素强度分布的图形化表示。OpenCV 作为一个全面的计算机视觉库,内置了计算和可视化直方图的强大功能。本文将深…

Linux 内核探秘:从零构建 GPIO 设备驱动程序实战指南

在嵌入式系统开发领域,GPIO(通用输入 / 输出)作为硬件与软件交互的桥梁,是实现设备控制与数据采集的基础。编写高效、稳定的 GPIO 设备驱动程序,对于发挥硬件性能至关重要。本文将深入剖析 Linux 内核中 GPIO 驱动开发…

嵌入式单片机中STM32F1演示寄存器控制方法

该文以STM32F103C8T6为示例,演示如何使用操作寄存器的方法点亮(关闭LED灯),并讲解了如何调试,以及使用宏定义。 第一:操作寄存器点亮LED灯。 (1)首先我们的目的是操作板子上的LED2灯,对其实现点亮和关闭操作。打开STM32F103C8T6的原理图,找到LED2的位置。 可以看到…

牛客网 NC16407 题解:托米航空公司的座位安排问题

牛客网 NC16407 题解:托米航空公司的座位安排问题 题目分析 解题思路 本题可以采用深度优先搜索(DFS)来解决: 从左上角开始,按行优先顺序遍历每个座位对于每个座位,有两种选择: 选择该座位(如果满足条件…

智慧展馆数字孪生平台

2022年进博会上,国家会展中心凭借“数字孪生机器人调度平台”惊艳全球,实现人机协同、虚实联动的智慧运营;2023年天府农博园通过“BIMIoT”技术,贯穿展馆全生命周期管理,成为农业会展的数字化标杆。这些案例背后&#…

胡说八道1---豆包问答总结

用户提问 1 指令:25 - - [21/May/2025:01:35:45 0000] “POST /prod-api/system/base/getList HTTP/1.1” 405 559 “http://192.168.1.109:16380/login” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 …

C# AOP编程

AOP(面向切片编程的概念我这里就不介绍了,这里先介绍一下C#中的AOP编程框架。 1.AOP的分类 .net下支持AOP的框架很多,搜了一下有:PostSharp、AspectInjector、Fody 、Castle Windsor、Spring.NET、Ninject、Unity等,实现的方式主要…

linux编译安装srs

下载编译运行 git clone https://github.com/ossrs/srs.git cd srs/trunk ./configure --h265on make需要安装 yum install -y patch yum install -y unzip yum install -y tcl编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/s…

EtherNet/IP机柜内解决方案在医疗控制中心智能化的应用潜能和方向分析

引言 在数智化转型浪潮席卷各行各业的今天,医疗领域同样面临着提升运营效率、改善患者体验和加强系统可靠性的多重挑战。Rockwell Automation于2025年5月20日推出的EtherNet/IP机柜内解决方案,为医疗中心的自动化升级提供了一种创新路径。本报告将深入分析这一解决方案的核心…

大模型下载到本地

一、huggingface 方式一 from huggingface_hub import snapshot_downloadlocal_dir "./origin" model_name "Qwen/Qwen2.5-1.5B"# snapshot_download(repo_idmodel_name, cache_dirlocal_dir) model_dir snapshot_download(model_name,cache_dirlocal…

【C++】vector容器实现

目录 一、vector的成员变量 二、vector手动实现 (1)构造 (2)析构 (3)尾插 (4)扩容 (5)[ ]运算符重载 5.1 迭代器的实现: (6&…

PostgreSQL日常维护

目录 一、PostgreSQL 概述 二、基本使用 (一)登录数据库 (二)数据库操作 1. 列出数据库 2. 创建数据库 3. 删除数据库 4. 切换数据库 5. 查看数据库大小 (三)数据表操作 1. 列出表 2. 创建表 …

广东省省考备考(第十六天5.21)—言语:语句排序题(听课后强化)

错题 解析 对比选项,确定首句。①句介绍目前人类可以利用一些技术手段进入元宇宙,凭借网络重新定义自己,体验一种全新的生活,②句介绍对于多数人来说,首先要弄清楚什么是元宇宙,③句介绍元宇宙是指超越现实…

高并发架构设计之限流

一、引言 再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量&#xff0…