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
    • 示例代码
  • 加减乘除
    • 加法和减法
    • 乘法和除法
  • broadcasting 机制
  • 更多运算
  • Links

索引 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)
  • 除法运算
  • 幂运算
  • 开方运算
  • 指数与对数运算
  • 近似值运算
  • 裁剪运算

Links

  • Tensor Broadcasting under the hood
  • Mastering PyTorch Indexing: Simple Techniques with Practical Examples
  • torch.Tensor的4种乘法
  • Pytorch Tensor基本数学运算

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961050.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024收尾工作

目录 开场白 栈与队列 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 堆(优先级队列) 堆排序 LeetCode215. 数组中的第 k 个最大元素 总结 开场白 今天是除夕&…

【反悔堆】【hard】力扣871. 最低加油次数

汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,用数组 stations 表示。其中 stations[i] [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处,并且有 fueli 升汽油。 假设汽车油…

PWM频率测量方法

测量PWM(脉宽调制)信号的频率是嵌入式系统中的常见需求,尤其是在电机控制、LED调光、传感器信号处理等场景中。 在这里介绍两种测量PWM频率的方法:测频法与测周法。 1、测频(率)法 原理:在闸门…

银行卡三要素验证接口:方便快捷地实现银行卡核验功能

银行卡三要素验证API:防止欺诈交易的有力武器 随着互联网的发展,电子支付方式也越来越普及。在支付过程中,银行卡是最常用的支付工具之一。然而,在一些支付场景中,需要对用户的银行卡信息进行验证,以确保支…

常见字符串相关题目

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 14.最长公共前缀 5.最长回文子串 67.二进制求和 43.字符串相乘 14.最长公共前缀 题目: 编写一个函数来查…

DeepSeek:突破传统的AI算法与下载排行分析

DeepSeek的AI算法突破DeepSeek相较于OpenAI以及其它平台的性能对比DeepSeek的下载排行分析(截止2025/1/28 AI人工智能相关DeepSeek甚至一度被推上了搜索)未来发展趋势总结 在人工智能技术飞速发展的当下,搜索引擎市场也迎来了新的变革。DeepS…

2025神奇的数字—新年快乐

2025年,一个神奇的数字,承载着数学的奥秘与无限可能。它是45的平方(45),上一个这样的年份是1936年(44),下一个则是2116年(46),一生仅此一次。2025…

搭建Spark分布式集群

1,下载 下载 spark-3.5.4-bin-without-hadoop.tgz 地址: https://downloads.apache.org/spark/spark-3.5.4/ 2,安装 通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中 localhost1。虚拟机的共享盘在 /mnt/hgfs/。 将共享盘安装…

2025春晚刘谦魔术揭秘魔术过程

2025春晚刘谦魔术揭秘魔术过程 首先来看全过程 将杯子,筷子,勺子以任意顺序摆成一排 1.筷子和左边物体交换位置 2.杯子和右边物体交换位置 3.勺子和左边物体交换位置 最终魔术的结果是右手出现了杯子 这个就是一个简单的分类讨论的问题。 今年的魔术…

通过高效的侦察发现关键漏洞接管整个IT基础设施

视频教程在我主页简介或专栏里 在这篇文章中, 我将深入探讨我是如何通过详细分析和利用暴露的端点、硬编码的凭据以及配置错误的访问控制,成功获取目标组织关键IT基础设施和云服务访问权限的全过程。 我们先提到目标网站的名称 https://*sub.domain*.co…

Java实战项目-基于 springboot 的校园选课小程序(附源码,部署,文档)

Java 基于 springboot 的校园选课小程序 博主介绍:✌程序员徐师兄、8年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战*✌ 🍅文末获取源码联系🍅 👇&…

计算机视觉-卷积

卷积-图像去噪 一、图像 二进制 灰度 彩色 1.1二进制图像 0 1 一个点可以用一个bit(0/1)来表示 1.2灰度图像 0-255 一个点可以用一个byte来表示 1.3彩色图像 RGB 表达一个彩色图像先说它的分辨率p/w(宽)和q/h(高…

【论文笔记】Fast3R:前向并行muti-view重建方法

众所周知,DUSt3R只适合做稀疏视角重建,与sapnn3r的目的类似,这篇文章以并行的方法,扩展了DUSt3R在多视图重建中的能力。 abstract 多视角三维重建仍然是计算机视觉领域的核心挑战,尤其是在需要跨不同视角实现精确且可…

基于SpringBoot的高校一体化服务平台的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

单片机基础模块学习——AT24C02芯片

一、EEPROM芯片 ROMRAM断电后数据保留断电后数据消失 因此,如果在断电后希望数据继续保留的话,就需要存储在EEPROM芯片中。 二、EEPROM芯片原理图 A0~A2与芯片地址相关连接到GND,为0GND 接地,VCC 正电源 WP——write protect写…

VSCode+Continue实现AI辅助编程

Continue是一款功能强大的AI辅助编程插件,可连接多种大模型,支持代码设计优化、错误修正、自动补全、注释编写等功能,助力开发人员提高工作效率与代码质量。以下是其安装和使用方法: 一、安装VSCode 参见: vscode安…

开源先锋DeepSeek-V3 LLM 大语言模型本地调用,打造自己专属 AI 助手

DeepSeek-V3是一个强大的混合专家 (MoE) 语言模型,总共有 671B 个参数。为了实现高效的推理和经济高效的训练,DeepSeek-V3 采用了多头潜在注意力机制 (MLA) 和 DeepSeekMoE 架构,这些架构在 DeepSeek-V2 中得到了彻底的验证。此外&#xff0c…

在Windows系统中本地部署属于自己的大语言模型(Ollama + open-webui + deepseek-r1)

文章目录 1 在Windows系统中安装Ollama,并成功启动;2 非docker方式安装open-webui3下载并部署模型deepseek-r1 Ollama Ollama 是一个命令行工具,用于管理和运行机器学习模型。它简化了模型的下载与部署,支持跨平台使用&#xff0c…

【问题】Chrome安装不受支持的扩展 解决方案

此扩展程序已停用,因为它已不再受支持 Chromium 建议您移除它。详细了解受支持的扩展程序 此扩展程序已停用,因为它已不再受支持 详情移除 解决 1. 解压扩展 2.打开manifest.json 3.修改版本 将 manifest_version 改为3及以上 {"manifest_ver…

RoboVLM——通用机器人策略的VLA设计哲学:如何选择骨干网络、如何构建VLA架构、何时添加跨本体数据

前言 本博客内解读不少VLA模型了,包括π0等,且如此文的开头所说 前两天又重点看了下openvla,和cogact,发现 目前cogACT把openvla的动作预测换成了dit,在模型架构层面上,逼近了π0​那为了进一步逼近&#…