跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

PyTorch scatter() 与 scatter_() 用法详解

PyTorch 中 scatter 系列函数用于根据索引将源数据填充到目标张量的指定位置。scatter_ 为原地操作,直接修改原 Tensor,而 scatter 返回新 Tensor。核心参数包括维度 dim、索引张量 index 和源数据 src。通过控制 index 的值,可以灵活地将数据分散到不同行列,常用于 One-hot 编码或动态掩码构建。使用时需注意索引范围及形状匹配,避免越界错误。相比循环赋值,该操作在 GPU 上具有更高的并行效率。

极客零度发布于 2020/8/30更新于 2026/9/959 浏览
PyTorch scatter() 与 scatter_() 用法详解

PyTorch scatter() 与 scatter_() 详解

在 PyTorch 中,函数名末尾带下划线(如 scatter_)通常表示原地操作(in-place),即直接修改原 Tensor;而不带下划线的版本(scatter)则返回一个新的 Tensor,不改变输入数据。

函数参数说明

scatter(dim, index, src) 的核心逻辑是根据索引将源数据填充到目标位置:

  • dim: 指定沿着哪个维度进行索引填充。例如 0 代表行,1 代表列。
  • index: 一个长整型张量,形状需与 src 一致,用于指示每个元素的目标位置。
  • src: 源数据,可以是标量或张量。

按行填充示例

我们通过一个具体的例子来理解 dim=0 时的行为。假设我们要把随机生成的矩阵 x 填充到一个全零矩阵的特定行上。

import torch

# 创建一个 2x5 的随机张量作为源数据
x = torch.rand(2, 5)

# 定义索引张量,形状必须与 src 一致
# 这里的值代表目标张量在 dim=0 方向上的行号
index = torch.LongTensor([
    [0, 1, 2, 0, 0], 
    [2, 0, 0, 1, 2]
])

# 创建一个 3x5 的全零张量作为目标
# scatter_ 会按照 index 的指引,把 x 的值填进去
result = torch.zeros(3, 5).scatter_(0, index, x)

在这个例子中,index 里的第 1 行第 0 列是 2,意味着 x[0, 0] 的值会被填入 result 的第 2 行第 0 列。注意,目标张量的列数必须与 src 相同,而 index 中的最大值不能超过目标张量在 dim 维度上的大小减一。

运行后,result 的形状依然是 (3, 5),但部分位置已被 x 的数据覆盖。这种机制常用于 One-hot 编码转换、动态掩码设置等场景,比循环赋值高效得多。

目录

  1. PyTorch scatter() 与 scatter_() 详解
  2. 函数参数说明
  3. 按行填充示例
  4. 创建一个 2x5 的随机张量作为源数据
  5. 定义索引张量,形状必须与 src 一致
  6. 这里的值代表目标张量在 dim=0 方向上的行号
  7. 创建一个 3x5 的全零张量作为目标
  8. scatter_ 会按照 index 的指引,把 x 的值填进去

更多推荐文章

查看全部
  • CC-Switch 跨平台 AI 编码助手配置管理工具
  • Web 虚拟卡销售平台实现方案
  • Python 核心应用场景:Web 开发、数据科学与自动化实战
  • faster-whisper 语音转文字工具入门与性能优化
  • ESP32 + 大功率双向 ESC 机器人底盘动力控制方案
  • 机器人日志系统十年演进:从故障排查到核心数据资产
  • GitHub 高效挖掘开源项目的四种实用方法
  • Vue 项目服务器部署指南:Nginx 与 Node 环境配置
  • C++ STL map 容器核心概念与实战应用
  • 归并排序非递归实现详解:自底向上策略
  • 基于 SpringBoot 的校园二手书籍系统设计
  • 国产主流 AI 智能体平台 OpenClaw 及其竞品对比汇总
  • Docker 部署 Neo4j 图数据库指南
  • Windows 下 Git Bash 安装与基础配置指南
  • Llama.cpp 跨平台部署本地大模型实战指南
  • C++入门:历史、第一个程序与命名空间
  • OpenClaw 全平台卸载指南:Windows macOS Linux npm pnpm
  • Neo4j Desktop 2 安装与使用指南
  • HDFS 存储原理:冗余策略、数据存取与错误恢复
  • 程序员如何系统学习数据结构和算法

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online