【深度学习】Pytorch 教程(十二):PyTorch数据结构:4、张量操作(3):张量修改操作(拆分、拓展、修改)
文章目录
- 一、前言
- 二、实验环境
- 三、PyTorch数据结构
- 1、Tensor(张量)
- 1. 维度(Dimensions)
- 2. 数据类型(Data Types)
- 3. GPU加速(GPU Acceleration)
- 2、张量的数学运算
- 1. 向量运算
- 2. 矩阵运算
- 3. 向量范数、矩阵范数、与谱半径详解
- 4. 一维卷积运算
- 5. 二维卷积运算
- 6. 高维张量
- 3、张量的统计计算
- 4、张量操作
- 1. 张量变形
- 2. 索引
- 3. 切片
- 4. 张量修改
- a. 张量拆分
- split
- unbind
- chunk
- b. 张量扩展
- repeat
- cat
- stack
- c. 张量修改
- 使用索引和切片进行修改
- gather
- scatter
一、前言
本文将介绍PyTorch中张量的拆分(split、unbind、chunk)、拓展(repeat、cat、stack)、修改操作(使用索引和切片、gather、scatter)
二、实验环境
本系列实验使用如下环境
conda create -n DL python==3.11
conda activate DL
conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia
三、PyTorch数据结构
1、Tensor(张量)
Tensor(张量)是PyTorch中用于表示多维数据的主要数据结构,类似于多维数组,可以存储和操作数字数据。
1. 维度(Dimensions)
Tensor(张量)的维度(Dimensions)是指张量的轴数或阶数。在PyTorch中,可以使用size()方法获取张量的维度信息,使用dim()方法获取张量的轴数。

2. 数据类型(Data Types)
PyTorch中的张量可以具有不同的数据类型:
- torch.float32或torch.float:32位浮点数张量。
- torch.float64或torch.double:64位浮点数张量。
- torch.float16或torch.half:16位浮点数张量。
- torch.int8:8位整数张量。
- torch.int16或torch.short:16位整数张量。
- torch.int32或torch.int:32位整数张量。
- torch.int64或torch.long:64位整数张量。
- torch.bool:布尔张量,存储True或False。
【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量)及其维度(Dimensions)、数据类型(Data Types)
3. GPU加速(GPU Acceleration)
【深度学习】Pytorch 系列教程(二):PyTorch数据结构:1、Tensor(张量): GPU加速(GPU Acceleration)
2、张量的数学运算
PyTorch提供了丰富的操作函数,用于对Tensor进行各种操作,如数学运算、统计计算、张量变形、索引和切片等。这些操作函数能够高效地利用GPU进行并行计算,加速模型训练过程。
1. 向量运算
【深度学习】Pytorch 系列教程(三):PyTorch数据结构:2、张量的数学运算(1):向量运算(加减乘除、数乘、内积、外积、范数、广播机制)
2. 矩阵运算
【深度学习】Pytorch 系列教程(四):PyTorch数据结构:2、张量的数学运算(2):矩阵运算及其数学原理(基础运算、转置、行列式、迹、伴随矩阵、逆、特征值和特征向量)
3. 向量范数、矩阵范数、与谱半径详解
【深度学习】Pytorch 系列教程(五):PyTorch数据结构:2、张量的数学运算(3):向量范数(0、1、2、p、无穷)、矩阵范数(弗罗贝尼乌斯、列和、行和、谱范数、核范数)与谱半径详解
4. 一维卷积运算
【深度学习】Pytorch 系列教程(六):PyTorch数据结构:2、张量的数学运算(4):一维卷积及其数学原理(步长stride、零填充pad;宽卷积、窄卷积、等宽卷积;卷积运算与互相关运算)
5. 二维卷积运算
【深度学习】Pytorch 系列教程(七):PyTorch数据结构:2、张量的数学运算(5):二维卷积及其数学原理
6. 高维张量
【深度学习】pytorch教程(八):PyTorch数据结构:2、张量的数学运算(6):高维张量:乘法、卷积(conv2d~ 四维张量;conv3d~五维张量)
3、张量的统计计算
【深度学习】Pytorch教程(九):PyTorch数据结构:3、张量的统计计算详解
4、张量操作
1. 张量变形
【深度学习】Pytorch教程(十):PyTorch数据结构:4、张量操作(1):张量变形操作
2. 索引
3. 切片
【深度学习】Pytorch 教程(十一):PyTorch数据结构:4、张量操作(2):索引和切片操作
4. 张量修改
a. 张量拆分
split
沿指定维度将张量拆分为多个张量
import torch# 创建一个张量
x = torch.tensor([[1, 2, 3], [4, 5, 6]])
y1, y2 = x.split(2, dim=1)
print(y1)
print(y2)
unbind
沿指定维度对张量进行拆分,返回拆分后的张量列表
import torchx = torch.tensor([[1, 2, 3], [4, 5, 6]])y1, y2 = x.unbind(dim=0)
print(y1)
print(y2)

chunk
沿指定维度将张量均匀分割为多个张量
import torch# 创建一个张量
x = torch.tensor([[1, 2, 3, 4, 5, 6]])# 沿指定维度均匀分割为多个张量
y = x.chunk(3, dim=1)
for chunk in y:print(chunk)

b. 张量扩展
repeat
复制张量中的元素进行重复操作
import torchx = torch.tensor([[1, 2, 3], [4, 5, 6]])# 重复操作
y = x.repeat(1, 2)
print(y)
z = x.repeat(2, 2)
print(z)

cat
沿指定维度对多个张量进行拼接
import torchx1 = torch.tensor([[1, 2, 3], [4, 5, 6]])
x2 = torch.tensor([[7, 8, 9], [10, 11, 12]])# 在指定维度上进行拼接
y = torch.cat((x1, x2), dim=0)
print(y)
stack
沿新的维度对多个张量进行堆叠
import torch# 创建两个张量
x1 = torch.tensor([[1, 2, 3], [4, 5, 6]])
x2 = torch.tensor([[7, 8, 9], [10, 11, 12]])# 在新维度上进行堆叠
y = torch.stack((x1, x2), dim=0)
print(y)

c. 张量修改
使用索引和切片进行修改
可以使用索引和切片操作来修改张量中的特定元素或子集
import torchx = torch.tensor([[1, 2, 3], [4, 5, 6]])
x[0, 1] = 9 # 修改第0行、第1列的元素为9
print(x)
- 输出:
tensor([[1, 9, 3],[4, 5, 6]])
gather
按指定索引从输入张量中收集指定维度的值
import torchx = torch.tensor([[1, 2, 3], [4, 5, 6]])# 按索引收集值
indices = torch.tensor([[0, 0, 1], [1, 0, 0]])
y = torch.gather(x, 1, indices)
print(y)
tensor([[1, 1, 2],[5, 4, 4]])
scatter
将值按指定索引散射到新张量中
import torchx = torch.zeros(2, 4)# 按索引散射值
indices = torch.tensor([[0, 1], [2, 3]])
values = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)
y = x.scatter(1, indices, values)
print(y)
tensor([[1., 2., 0., 0.],[0., 0., 3., 4.]])
相关文章:
【深度学习】Pytorch 教程(十二):PyTorch数据结构:4、张量操作(3):张量修改操作(拆分、拓展、修改)
文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor(张量)1. 维度(Dimensions)2. 数据类型(Data Types)3. GPU加速(GPU Acceleration) 2、张量的数学运算1. 向量运算2. 矩阵…...
适合新手博主站长使用的免费响应式WordPress博客主题JianYue
这款JianYue主题之所以命名为 JianYue,意思就是简单而不简约的。是根据Blogs主题优化而成,剔除了一些不必要的功能及排版,仅保留一种博客布局,让新手站长能够快速手上WordPress。可以说这款主题比较适合新手博主站长使用ÿ…...
FPGA OSERDESE2
Output Parallel-to-Serial Logic Resources (OSERDESE2) OSERDESE2 在Xilinx 7 系列器件是一款专用的并行至串行转换器,具有特定的时钟和逻辑资源,旨在促进高速源同步接口的实现。每个OSERDESE2模块都包括一个专用的数据串行器和 3 状态控制。数据和 3 态串行器都可以在 SD…...
如何卸载Erlang以及RabbitMQ
参考以下两篇文章 https://blog.csdn.net/m0_49605579/article/details/130196536 Windows如何完全卸载RabbitMQ和Erlang_删除注册表hkey_local_machine\software\ericsson\erlang\e-CSDN博客 首先我是按照链接一的操作进行了卸载,但是Erlang的安装目录一直删除不…...
ros自定义action记录
文章目录 自定义action1. 定义action文件2. 修改 package.xml3. 修改 CMakeLists.txt4. 运行 catkin build5. simple_action_server.py6. simple_action_client.py 测试 自定义action ros 版本:kinetic 自定义test包的文件结构如下 |-- test | |-- CMakeLists.t…...
挑战30天学完Python:Day18 正则表达式
📘 Day 18 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…...
力扣● 343. 整数拆分 ● 96.不同的二叉搜索树
● 343. 整数拆分 想不到,要勇于看题解。 关键在于理解递推公式。 1、DP数组及其下标的含义:dp[i]是分解i这个数得到的最大的乘积。 2、DP数组如何初始化:dp[0]和dp[1]都没意义,所以直接不赋值,初始化dp[2]1即可。…...
游戏同步+游戏中的网络模块
原文链接:游戏开发入门(九)游戏同步技术_游戏数据同步机制流程怎么开发-CSDN博客 游戏开发入门(十)游戏中的网络模块_游戏开发组网-CSDN博客 3.同步技术的基本常识: a.同步给谁?某个用户&…...
【03】逆序数组
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、逆序函数是什么? 二、逆序函数原码 1.直接逆序 2.创建临时数组逆序 三、结言 💥一、逆序函数是什么? 示例:输入1 4 …...
基于Prony算法的系统参数辨识matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 Prony算法是一种用于信号处理和系统辨识的经典方法,特别适用于线性时不变系统(LTI)的频率响应分析以及模拟复指数信号序列。其…...
创建第一个React项目
React脚手架 npx create-react-app react-demonpx是直接从互联网网上拉最新的脚手架进行创建react 运行React项目 npm start若想找到Webpack配置文件 npm ejectReact的基本使用 基本步骤 导入react和react-dom vue 创建react元素 渲染react元素到页面中导入 import React…...
Redis篇之Redis持久化的实现
持久化即把数据保存到可以永久保存的存储设备当中(磁盘)。因为Redis是基于内存存储数据的,一旦redis实例当即数据将会全部丢失,所以需要有某些机制将内存中的数据持久化到磁盘以备发生宕机时能够进行恢复,这一过程就称…...
dpdk环境搭建和工作原理
文章目录 1、DPDK环境搭建1.1、环境搭建1.2、编译DPDK 2、DPDK工作原理 1、DPDK环境搭建 1.1、环境搭建 工具准备:VMware、ubuntu16.04。 (1)VMware添加两个网卡。桥接网卡作为 DPDK 运行的网卡,NAT 网卡作为 ssh 连接的网卡。 …...
接口测试实战--自动化测试流程
一、项目前期准备 常见项目软件架构: springMvc:tomcat里运行war包(在webapps目录下) springboot:java -jar xx.jar -xms(**) 运行参数 springCloud:k8s部署,使用kubectl create -f xx.yaml 接口自动化测试介入需越早越好,只要api定义好就可以编写自动化脚本; 某个…...
babylonjs中文文档
经过咨询官方,文档已经添加了开源协议。 基于目前babylonjs没有中文文档,为了打造更好的babylonjs生态圈 ,特和小伙伴们翻译了官方文档。 相关链接: 欢迎加群:464146715 官方文档 中文文档 Babylonjs案例分享...
WordPress使用
WordPress功能菜单 仪表盘 可以查看网站基本信息和内容。 文章 用来管理文章内容,分类以及标签。编辑文章以及设置分类标签,分类和标签可以被添加到 外观-菜单 中。 分类名称自定义;别名为网页url链接中的一部分,最好别设置为中文…...
IDEA 2021.3激活
1、打开idea,在设置中查找Settings/Preferences… -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io搜索:IDE Eval Reset 插件进行安装。应用和使用,如图...
进度条小程序
文章目录 铺垫回车换行缓冲区概述强制冲刷缓冲区 简单实现倒计时功能进度条小程序版本一实例代码效果展示分析 版本二 铺垫 回车换行 回车和换行是两个独立的动作 回车是将光标移动到当前行的最开始(最左侧) 换行是竖直向下平移一行 在C语言中&…...
K8S安装部署
常见的K8S安装部署方式 Minikube Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。 部署地址:Install Tools | Kubernetes Kubeadm Kubeadm也是一个工具,提供kubeadm init和kube…...
AI大模型与小模型之间的“脱胎”与“反哺”(第一篇)
一、AI小模型脱胎于AI大模型,而AI小模型群又可以反哺AI大模型 AI大模型(如GPT、BERT等)通常拥有大量的参数和训练数据,能够生成或理解复杂的文本内容。这些大模型在训练完成后,可以通过剪枝、微调等方式转化为小模型&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
