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基本数学运算

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景

新手理解:Android 中 Handler 和 Thread.sleep 的区别及应用场景 Handler 是啥?Handler 的几个核心功能: Thread.sleep 是啥?Thread.sleep 的核心特点: 两者的区别它们的应用场景1. Handler 的应用场景2. Thread.sleep…

YOLOv10-1.1部分代码阅读笔记-val.py

val.py ultralytics\models\yolov10\val.py 目录 val.py 1.所需的库和模块 2.class YOLOv10DetectionValidator(DetectionValidator): 1.所需的库和模块 from ultralytics.models.yolo.detect import DetectionValidator from ultralytics.utils import ops import torc…

STM32 硬件I2C读写

单片机学习! 目录 前言 一、步骤 二、配置I2C外设 2.1 开启I2C外设和GPIO口时钟 2.2 GPIO口初始化为复用开漏模式 2.3 结构体配置I2C 2.4 使能I2C 2.5 配置I2C外设总代码 三、指定地址写时序 3.1 生产起始条件S 3.2 监测EV5事件 3.3 发送从机地址 3.4 …

Transfoemr的解码器(Decoder)与分词技术

在自然语言处理(NLP)领域,解码器(Decoder)和分词技术是两个至关重要的概念。解码器是序列生成任务的核心组件,而分词则是将文本数据转换为可处理形式的基础步骤。 一、解码器(Decoder&…

使用 Elasticsearch 导航检索增强生成图表

作者:来自 Elastic Louis Jourdain 及 Ivan Monnier 了解如何使用知识图谱来增强 RAG 结果,同时在 Elasticsearch 中高效存储图谱。本指南探讨了根据用户查询动态生成知识子图的详细策略。 检索增强生成 (RAG) 通过将大型语言模型 (LLM) 的输出基于事实数…

【后端开发】字节跳动青训营之性能分析工具pprof

性能分析工具pprof 一、测试程序介绍二、pprof工具安装与使用2.1 pprof工具安装2.2 pprof工具使用 资料链接: 项目代码链接实验指南pprof使用指南 一、测试程序介绍 package mainimport ("log""net/http"_ "net/http/pprof" // 自…

【工具】CountUp.js

作用&#xff1a;实现数字的动画展示效果 使用步骤&#xff1a; 安装 npm i countup.js导入 import { CountUp } from countUps;HTML结构 <span ref"countup1Ref">{{ props.number1 }}</span> <span ref"countup2Ref">{{ props.number2 …

【落羽的落羽 数据结构篇】算法复杂度

文章目录 一、数据结构和算法简介二、算法复杂度1. 时间复杂度2. 空间复杂度 一、数据结构和算法简介 数据结构是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用&#xff0c;所以我们要学…

VsCode安装文档

一、下载 进入VS Code官网&#xff1a;Visual Studio Code - Code Editing. Redefined&#xff0c;点击 DownLoad for Windows下载windows版本 当然也可以点击旁边的箭头&#xff0c;下载Windows版本 或 Mac OS 版本 备注&#xff1a; Stable&#xff1a;稳定版Insiders&#…

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析&#xff08;1&#xff09;&#xff1a;stdio测试&#xff08;一&#xff09; 继续stdio测试的分析&#xff0c;上篇讲到标准IO端口初始化&#xff0c;单从测试内容来说其实很简单&#xff0c;没啥可分析的&#xff0c;但这几篇…

机器学习-核函数(Kernel Function)

核函数&#xff08;Kernel Function&#xff09;是一种数学函数&#xff0c;主要用于将数据映射到一个更高维的特征空间&#xff0c;以便于在这个新特征空间中更容易找到数据的结构或模式。核函数的主要作用是在不需要显式计算高维特征空间的情况下&#xff0c;通过内积操作来实…

计算机网络 (60)蜂窝移动通信网

一、定义与原理 蜂窝移动通信网是指将一个服务区分为若干蜂窝状相邻小区并采用频率空间复用技术的移动通信网。其原理在于&#xff0c;将移动通信服务区划分成许多以正六边形为基本几何图形的覆盖区域&#xff0c;称为蜂窝小区。每个小区设置一个基站&#xff0c;负责本小区内移…

每日一题 419. 棋盘上的战舰

419. 棋盘上的战舰 简单 class Solution { public:int countBattleships(vector<vector<char>>& board) {int ans 0;for(int i0;i<board.size();i){for(int j0;j<board[0].size();j){if(board[i][j] X){dfs(board,i,j);ans;}}}return ans;}void dfs(…

win32汇编环境,函数的编写与调用、传值或返回值等

;运行效果 ;win32汇编环境,函数的编写与调用、传值或返回值等 ;函数在被调用的时候&#xff0c;如果此函数实体在前面&#xff0c;可以不用声明。如果实体在后面&#xff0c;则需要先声明。类似于下面的DlgProc函数&#xff0c;因为它的实体在后面&#xff0c;所以需要在调用之…

web前端3--css

注意&#xff08;本文一切代码一律是在vscode中书写&#xff09; 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…

Oracle 创建用户和表空间

Oracle 创建用户和表空间 使用sys 账户登录 建立临时表空间 --建立临时表空间 CREATE TEMPORARY TABLESPACE TEMP_POS --创建名为TEMP_POS的临时表空间 TEMPFILE /oracle/oradata/POS/TEMP_POS.DBF -- 临时文件 SIZE 50M -- 其初始大小为50M AUTOEXTEND ON -- 支持…

Java 大视界 -- Java 大数据中的异常检测技术与应用(61)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

利用大语言模型(LLM)增强软件测试自动化的最佳实践

在当今迅速变化的科技时代&#xff0c;软件测试行业面临着越来越高的效率和质量要求。作为测试专家&#xff0c;我们都知道&#xff0c;传统的测试方法往往无法满足快速迭代和高效交付的需求。在这种背景下&#xff0c;自动化测试逐渐成为解决方案的一部分。而大语言模型&#…

Anonymous,Github 匿名化工具

一.Github 匿名化工具 Anonymous&#xff0c;会为 github 自动生成一个匿名化的URL&#xff0c;保护隐私和双盲评审 待添加...

Linux(Centos、Ubuntu) 系统安装jenkins服务

该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速&#xff0c;解决插件下载失败问题 安装方式&#xff1a;war包安装 阿里云提供的war下载源地址&#xff1a;https://mirrors.aliyun.com/jenkins/war/?s…