Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战

前一篇文章,Tensor 基本操作3 理解 shape, stride, storage, view,is_contiguous 和 reshape 操作 | PyTorch 深度学习实战

本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started

Tensor 基本使用

索引 indexing

Tensor 的索引类似于 Python List 的索引和分片。

比如一个 AxBxC 的三个维度的 Tensor a。

a`第0维的分片`, `第1维的分片`, `第2维的分片`

分片的语法和 Python List 分片语法一致,开始:结束:步进。

更多索引的高级语法介绍。

示例代码

复制代码
    print("*" * 8, " a")
    a = torch.randn(5,4,3)
    print(a)

    print("*" * 8, " b")
    b = a[1,]     # 只要第 0 维的第一个成员
    print(b)

    print("*" * 8, " c")
    c = a[1:]   # 第 0 维从第一个成员开始都要,注意:这里索引从 0 开始
    print(c)

    print("*" * 8, " d")
    d = a[1:, 1] # 第 0 维从第一个成员开始都要,第二维只要第一个成员
    print(d)

Result

复制代码
********  a
tensor([[[ 0.1874, -0.0980, -0.3815],
         [-0.8175,  1.5976, -1.4927],
         [-0.1507,  1.1806, -0.3685],
         [ 1.1583,  0.9419, -0.5540]],

        [[ 1.3078, -1.4250, -1.5981],
         [-0.0756,  2.0776,  0.7708],
         [ 1.6020, -1.9133,  1.2459],
         [-0.2817, -0.7238, -0.5413]],

        [[-0.8057, -0.4368, -1.2398],
         [ 0.8415,  1.7679,  0.6469],
         [ 0.7046, -0.4872,  1.1219],
         [-2.5866, -0.1263,  2.0684]],

        [[ 1.8756,  1.4231, -1.2082],
         [ 0.2111,  0.5244,  2.2242],
         [-0.9658, -1.3731, -0.9126],
         [-0.3850, -0.7273, -0.0519]],

        [[ 0.7949,  2.2807, -0.8793],
         [ 0.4037,  1.2422, -0.2393],
         [ 0.4786,  0.6107,  1.4225],
         [ 0.6104,  1.2682, -0.0801]]])
********  b = a[1,]
tensor([[ 1.3078, -1.4250, -1.5981],
        [-0.0756,  2.0776,  0.7708],
        [ 1.6020, -1.9133,  1.2459],
        [-0.2817, -0.7238, -0.5413]])
********  c = a[1:]
tensor([[[ 1.3078, -1.4250, -1.5981],
         [-0.0756,  2.0776,  0.7708],
         [ 1.6020, -1.9133,  1.2459],
         [-0.2817, -0.7238, -0.5413]],

        [[-0.8057, -0.4368, -1.2398],
         [ 0.8415,  1.7679,  0.6469],
         [ 0.7046, -0.4872,  1.1219],
         [-2.5866, -0.1263,  2.0684]],

        [[ 1.8756,  1.4231, -1.2082],
         [ 0.2111,  0.5244,  2.2242],
         [-0.9658, -1.3731, -0.9126],
         [-0.3850, -0.7273, -0.0519]],

        [[ 0.7949,  2.2807, -0.8793],
         [ 0.4037,  1.2422, -0.2393],
         [ 0.4786,  0.6107,  1.4225],
         [ 0.6104,  1.2682, -0.0801]]])
********  d = a[1:, 1]
tensor([[-0.0756,  2.0776,  0.7708],
        [ 0.8415,  1.7679,  0.6469],
        [ 0.2111,  0.5244,  2.2242],
        [ 0.4037,  1.2422, -0.2393]])

加减乘除

加法和减法

复制代码
import torch
 
# 这两个Tensor加减乘除会对b自动进行Broadcasting
a = torch.rand(3, 4)
b = torch.rand(4)
 
c1 = a + b
c2 = torch.add(a, b)
print(c1.shape, c2.shape)
print(torch.all(torch.eq(c1, c2)))

乘法和除法

*, torch.mul, torch.mm, torch.matmul

参考: torch.Tensor的4种乘法

除法可以用乘法 API 完成。

broadcasting 机制

在 Tensor 的加减运算中,当两个 tensor 不能直接符合数学的运算规则时,PyTorch 会先尝试将 tensor 进行变换,再进行计算,这个变换的规则就是:broadcasting。

更多 broadcasting 机制的介绍。

更多运算

更多加法和其他运算,参考Pytorch Tensor基本数学运算:

  • 减法运算
  • 哈达玛积(对应元素相乘,也称为 element wise)
  • 除法运算
  • 幂运算
  • 开方运算
  • 指数与对数运算
  • 近似值运算
  • 裁剪运算
相关推荐
回眸&啤酒鸭4 天前
【回眸】Minicart 电商购物车核心功能落地指南
人工智能
一隅论数智4 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
AI的探索之旅4 天前
97 个 OpenCV 实例(三十):双目立体,从标定到点云
人工智能·opencv·计算机视觉
AlbertZein4 天前
Step-5-Preview 上手实测:3D 游戏、金融分析、网页设计一次跑完
人工智能·aigc
LaughingZhu4 天前
Product Hunt 每日热榜 | 2026-09-19
人工智能·深度学习·神经网络·搜索引擎·百度
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
wukangjupingbb4 天前
智能网联汽车安全能力框架
人工智能
风合星语4 天前
2026 具身智能技术实战(一):VLA 到底怎么控制机器人?——用 LeRobot 跑通 SmolVLA 推理
pytorch·机器人·具身智能·vla·lerobot·smolvla
龙亘川4 天前
明月照湾区,智启新赛道:从顶流文旅IP盛会看智慧文旅升级路径
人工智能·智慧城市·开源软件·数据可视化