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博客中的 张量的高级索引

总结:

  • 索引张量的形状直接决定了返回张量的形状。
  • 当多个索引张量时,它们会广播以匹配维度,然后返回广播后形状的张量。
相关推荐
聚梦小课堂7 分钟前
Jev模型:一个不会说话,只做判断的模型
人工智能·chatgpt
高升说8 分钟前
深度相机接口选型:MIPI、USB3 与 GigE 的带宽估算与工程取舍
网络·人工智能·数码相机
成为深度学习高手11 分钟前
DAG:沿时间与通道双相关建模的外生变量时序预测
网络·人工智能·深度学习·算法·机器学习·数据挖掘·时序数据库
迅易科技11 分钟前
微软Copilot最新升级解读:哪些变化真正影响企业数字化建设?
人工智能·microsoft·copilot
FPGA小徐15 分钟前
Ubuntu 22.04 安装 Miniconda、PyTorch 与 YOLOv8 并完成 CPU 推理
pytorch·yolo·ubuntu
外收内放17 分钟前
Python基础语法练习题(40-42)
开发语言·python
Geek-Chow17 分钟前
反向代理:从银行边缘网关到 AI 网关的第一性原理
人工智能
开开心心就好18 分钟前
视频模糊怎么修复?免费工具支持批量处理
java·前端·人工智能·智能手机·pdf·excel
change_fate19 分钟前
ChatGPT打不开,卸载删除不了,但是存在列表中问题修复
人工智能·chatgpt
ofoxcoding19 分钟前
AI驱动的客户反馈分类实战:多标签提取、去重与统计方案详解
人工智能·分类·数据挖掘