郭震 AI公众号:郭震AI

7 Pytorch小白从零学教程:张量的索引与切片

发布日期:

最近更新:

分类: Pytorch小白

预计阅读: 3 分钟

阅读次数: 0

预计阅读3 分钟
结构重点9 个
图文要点6 张
正文规模1.0k 字

整理说明

这篇内容怎么整理

郭震 · 2026-06-04

独立整理围绕 9 个结构重点拆成环境、步骤、验证点和常见误区,尽量让读者能照着复现。
图文对照保留 6 张和配置、流程、判断结果有关的图片,方便快速定位正文重点。
持续校对工具、模型和命令变化较快,后续优先修正入口、参数和风险提醒。

阅读路线

先按这条路线读

先抓住主线,再回到代码、配置和图文细节,读起来会更稳。

图文要点

先看本文图文节点

按图先建立主线,再跳回正文核对步骤、配置和判断标准。

张量索引与切片流程图查看大图
张量索引与切片流程图

索引和切片看似基础,但会直接影响模型输入。尤其是批次维度和通道维度,一旦切错,模型可能还能跑,却学不到正确东西。

张量索引与切片核对图查看大图
张量索引与切片核对图

切完张量后,我会立刻检查 shape 和前几项值。只看代码不看结果,很容易把行列维度看反。

在上一篇中,我们介绍了张量的基本操作,如张量的创建、数据类型和一些常用的操作。如今,我们将深入探讨张量的索引与切片,这将帮助我们更灵活地处理数据。掌握这一部分的知识,可以为后续学习自动求导奠定坚实的基础。

张量的索引

在PyTorch中,张量的索引与NumPy基本相似。你可以使用[]来访问张量中的元素。以下是一些常见的索引方法。

张量索引切片判断卡查看大图
张量索引切片判断卡

学习 PyTorch 张量索引与切片时,先看维度顺序、切片范围、返回形状和是否共享底层数据。

1. 一维张量的索引

首先,我们创建一个一维张量:

import torch

# 创建一维张量
tensor1d = torch.tensor([10, 20, 30, 40, 50])
print(tensor1d)  # 输出: tensor([10, 20, 30, 40, 50])

我们可以通过索引访问单个元素:

# 访问第一个元素(索引0)
print(tensor1d[0])  # 输出: tensor(10)

2. 二维张量的索引

接下来,我们创建一个二维张量:

# 创建二维张量
tensor2d = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(tensor2d)
# 输出:
# tensor([[1, 2, 3],
#         [4, 5, 6],
#         [7, 8, 9]])

在二维张量中,我们可以通过行和列的索引来访问元素:

# 访问第二行第三列的元素
print(tensor2d[1, 2])  # 输出: tensor(6)

3. 使用切片访问部分元素

我们可以通过切片访问张量的一部分。例如,获取一维张量的前两个元素:

# 切片获取前两个元素
print(tensor1d[0:2])  # 输出: tensor([10, 20])

对于二维张量,我们可以通过切片获取特定的行或列:

# 获取前两行
print(tensor2d[0:2])  
# 输出:
# tensor([[1, 2, 3],
#         [4, 5, 6]])

# 获取第二列
print(tensor2d[:, 1])  # 输出: tensor([2, 5, 8])

张量的高级索引

1. 布尔索引

PyTorch阅读地图卡查看大图
PyTorch阅读地图卡

学习《Pytorch小白从零学教程:张量的索引与切片》不必一口气吃完所有细节。先挑一个能动手验证的小问题,再顺着图和正文补齐概念。

布尔索引允许基于条件选择元素。例如,我们想选择大于30的所有元素:

# 创建一维张量
tensor1d = torch.tensor([10, 20, 30, 40, 50])

# 使用布尔索引
result = tensor1d[tensor1d > 30]
print(result)  # 输出: tensor([40, 50])

2. 花式索引

花式索引允许我们通过指定索引列表来选择元素。例如,选择特定位置的元素:

# 花式索引
indices = torch.tensor([0, 2, 4])
result = tensor1d[indices]
print(result)  # 输出: tensor([10, 30, 50])

切片与视图

切片操作返回的是张量的一个“视图”,这意味着对视图进行修改会影响原始张量。例如:

# 创建二维张量
tensor2d = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
slice_tensor = tensor2d[0:2]  # 切片

# 修改切片
slice_tensor[0, 0] = 100

print(tensor2d)
# 输出:
# tensor([[100,  2,  3],
#         [  4,  5,  6],
#         [  7,  8,  9]])

如上所示,对slice_tensor的修改影响了tensor2d,因为它们共享相同的存储空间。

Pytorch小白从零学教程:张量的索引与切片应用复盘卡查看大图
Pytorch小白从零学教程:张量的索引与切片应用复盘卡

如果《Pytorch小白从零学教程:张量的索引与切片》还没完全消化,可以从这张卡片的四个动作重新走一遍。

Pytorch小白从零学教程:张量的索引与切片应用检查卡查看大图
Pytorch小白从零学教程:张量的索引与切片应用检查卡

回看《Pytorch小白从零学教程:张量的索引与切片》时,不必一次做大项目,先用一条简单样例确认主线是否清楚。

总结

本节中,我们学习了张量的索引和切片的基本用法,掌握了如何通过索引访问和操作张量中的数据。通过以上代码示例和案例分析,相信你已对这一内容有了较为深入的理解。

在下一篇教程中,我们将介绍自动求导的基本概念,它将为我们在深度学习中进行反向传播打下基础。希望你继续保持学习热情,为进入更复杂的深度学习领域做好准备!

继续阅读

从这篇继续找到相关教程

AI 教程总索引

常见问题

读前先确认这三点

Pytorch小白从零学教程:张量的索引与切片适合谁读?

这是 PyTorch 入门 系列第 7 / 20 篇,适合正在学习PyTorch 入门,并且需要把概念落到操作步骤或判断标准里的读者。

读这篇PyTorch 入门教程要多久?

按中文技术文章阅读速度估算,通读大约 3 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。

这篇文章里的图文节点怎么用?

正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。

分享文章

转发到常用平台

微信/朋友圈可先复制链接

相关教程

AI 教程总索引

继续阅读

继续找到相关 AI 教程

返回栏目

Reader Messages

读者留言

有问题、补充资料或实测结果,可以直接留下。这里不需要登录。

最多 800 字

为了防刷,每条留言会做长度、链接数量和提交频率限制。

0/800

留言列表

0
正在加载留言...