当前位置: 首页 > article >正文

pytorch张量高级索引介绍

PyTorch 中,张量索引操作可以使用高级索引(advanced indexing),其中索引可以是另一个张量。使用这种索引方式时,返回值的维度由索引张量的形状和原始张量的形状共同决定。以下是具体的规则和解释:

1. 基本概念

假设我们有一个张量 x 和索引张量 indices,我们通过 x[indices] 进行高级索引操作。

规则:

  • 索引张量的形状将决定返回值的形状。
  • 返回值的维度由索引张量的维度代替索引位置后的张量维度。

2. 示例讲解

示例 1:一维索引

x = torch.tensor([[10, 20, 30], [40, 50, 60]])
indices = torch.tensor([0, 1])
result = x[indices]
  • x 的形状是 (2, 3)
  • indices 是一维张量,形状是 (2,)
  • 索引 x[indices] 的结果:
    • 取出 x 的第 0 行和第 1 行。
    • 返回值的形状是 (2, 3)

示例 2:多维索引

x = torch.tensor([[10, 20, 30], [40, 50, 60]])
indices = torch.tensor([[0, 1], [1, 0]])
result = x[indices]

print(f"x.shape:{x.shape}")
print(f"index.shape:{index.shape}")
print(f"result.shape:{result.shape}")
print(result)

输出:

x.shape:torch.Size([2, 3])
index.shape:torch.Size([2, 2])
result.shape:torch.Size([2, 2, 3])
tensor([[[10, 20, 30],
         [40, 50, 60]],

        [[40, 50, 60],
         [10, 20, 30]]])

示例 3:多维组合索引

x = torch.tensor([[10, 20, 30], [40, 50, 60]])
rows = torch.tensor([0, 1])
cols = torch.tensor([1, 2])
result = x[rows, cols]
  • x 的形状是 (2, 3)
  • rows 和 cols 都是一维张量,形状为 (2,)
  • 索引 x[rows, cols]
    • 分别取出 x[0, 1] 和 x[1, 2]
    • 返回值是 (20, 60),形状为 (2,)

示例 4:广播索引

x = torch.tensor([[10, 20, 30], [40, 50, 60]])
rows = torch.tensor([[0], [1]])
cols = torch.tensor([0, 2])
result = x[rows, cols]
  • x 的形状是 (2, 3)
  • rows 的形状是 (2, 1)cols 的形状是 (2,)
  • 索引 x[rows, cols]
    • rows 和 cols 会广播成 (2, 2)
    • 返回值的形状是 (2, 2)

示例 5:更复杂的张量索引操作

AF3 AtomAttentionEncoder类的init_pair_repr方法解读-CSDN博客中的  张量的高级索引  

总结:

  • 索引张量的形状直接决定了返回张量的形状。
  • 当多个索引张量时,它们会广播以匹配维度,然后返回广播后形状的张量。


http://www.kler.cn/a/466329.html

相关文章:

  • 3125: 【入门】求1/1+1/2+2/3+3/5+5/8+8/13+13/21……的前n项的和
  • redis源码系列--(四)--redis cluster
  • 基于HTML和CSS的旅游小程序
  • 应用架构模式
  • 2025编程技术前沿:探索最新的开发工具与趋势
  • Java 内存溢出(OOM)问题的排查与解决
  • Sublime Text4 4189 安装激活【 2025年1月3日 亲测可用】
  • LLM 中的 Decoder Only
  • df.set_index(‘name‘).groupby(‘team‘).apply(first_3, ‘Q1‘)
  • 被催更了,2025元旦源码继续免费送
  • 一文讲清楚webpack和vite原理
  • Vue 快速入门:开启前端新征程
  • 像品茶一样品设计模式,早日突破编码新境界。
  • 2025 年软件行业展望:除了 AI,还有更多精彩
  • STM32CUBE快速入门02
  • 免费下载 | 2024网络安全产业发展核心洞察与趋势预测
  • 【VUE】使用create-vue快速创建一个vue + vite +vue-route 等其他查看的工程
  • 私享樱花盛景:滨江一品苑,尊享春日浪漫
  • df.groupby()方法使用表达式分组
  • 《向量数据库指南》——应对ElasticSearch挑战,拥抱Mlivus Cloud的新时代
  • 掌握RabbitMQ:全面知识点汇总与实践指南
  • golang 编程规范 - 项目目录结构
  • Gitlab部署maven的方法-适配AGP7.1+
  • GitHub Actions 自动构建和部署容器到 Azure Web App
  • C# 整型、浮点型 数值范围原理分析
  • Vue中常用指令