【PyTorch】PyTorch之Tensors索引切片篇

文章目录

  • 前言
  • 一、ARGWHERE
  • 二、CAT、CONCAT、CONCATENATE
  • 三、CHUNK
  • 四、GATHER
  • 五、MOVEDIM和MOVEAXIS
  • 六、PERMUTE
  • 七、RESHAPE
  • 八、SELECT
  • 九、SPLIT
  • 十、SQUEEZE
  • 十一、T
  • 十二、TAKE
  • 十三、TILE
  • 十四、TRANSPOSE
  • 十五、UNBIND
  • 十六、UNSQUEEZE
  • 十七、WHERE


前言

介绍常用的PyTorch之Tensors索引切片等


一、ARGWHERE

torch.argwhere(input) → Tensor
返回一个张量,其中包含输入张量中所有非零元素的索引。结果中的每一行都包含输入中一个非零元素的索引。结果按字典序排序,最后一个索引变化最快(C风格)。

如果输入具有n维,则生成的索引张量out的大小为(z×n),其中z是输入张量中非零元素的总数。

此函数类似于 NumPy 的 argwhere 函数。当输入位于 CUDA 上时,此函数会导致主机和设备的同步。
在这里插入图片描述

二、CAT、CONCAT、CONCATENATE

*torch.cat(tensors, dim=0, , out=None) → Tensor
Parameters:
tensors (sequence of Tensors) – any python sequence of tensors of the same type. Non-empty tensors provided must have the same shape, except in the cat dimension.
dim (int, optional) – the dimension over which the tensors are concatenated
Keyword Arguments:
out (Tensor, optional) – the output tensor.

在给定维度上连接给定的 seq 张量序列。所有张量必须具有相同的形状(除了连接的维度之外)或为空。
torch.cat() 可以被看作是 torch.split() 和 torch.chunk() 的逆操作。
通过示例,可以更好地理解 torch.cat()。
torch.stack() 沿新维度连接给定的序列。
在这里插入图片描述
CONCAT和CONCATENATE是CAT的别名,操作相同。

三、CHUNK

torch.chunk(input, chunks, dim=0) → List of Tensors
Parameters:
input (Tensor) – the tensor to split
chunks (int) – number of chunks to return
dim (int) – dimension along which to split the tensor

尝试将张量分割成指定数量的块。每块都是输入张量的视图。不同于torch.tensor_split(),一个始终返回确切指定数量块的函数,此函数可能返回少于指定数量的块!
如果沿着给定的维度 dim 的张量大小可被 chunks 整除,则所有返回的块将具有相同的大小。如果沿着给定的维度 dim 的张量大小不能被 chunks 整除,则所有返回的块将具有相同的大小,除了最后一个。如果这样的划分不可能,此函数可能返回少于指定数量的块。
在这里插入图片描述

四、GATHER

*torch.gather(input, dim, index, , sparse_grad=False, out=None) → Tensor
Parameters:
input (Tensor) – the source tensor
dim (int) – the axis along which to index
index (LongTensor) – the indices of elements to gather
Keyword Arguments:
sparse_grad (bool, optional) – If True, gradient w.r.t. input will be a sparse tensor.
out (Tensor, optional) – the destination tensor

沿着由 dim 指定的轴收集数值。
对于 3-D 张量,输出由以下规定:
如果 dim == 0,则 out[i][j][k] = input[index[i][j][k]][j][k];
如果 dim == 1,则 out[i][j][k] = input[i][index[i][j][k]][k];
如果 dim == 2,则 out[i][j][k] = input[i][j][index[i][j][k]];

input 和 index 必须具有相同数量的维度。还要求对于所有维度 d != dim,index.size(d) <= input.size(d)。out 将具有与 index 相同的形状。请注意,input 和 index 不会相互广播。
如果有其他问题或需要进一步解释,请随时告诉我。我很乐意帮助你。
在这里插入图片描述

五、MOVEDIM和MOVEAXIS

torch.movedim(input, source, destination) → Tensor
Parameters:
input (Tensor) – the input tensor.
source (int or tuple of ints) – Original positions of the dims to move. These must be unique.
destination (int or tuple of ints) – Destination positions for each of the original dims. These must also be unique.

将输入张量中的维度从源位置移动到目标位置。
未明确移动的输入的其他维度保持在其原始顺序中,并出现在目标中未指定的位置。
在这里插入图片描述
MOVEAXIS是MOVEDIM的别名。

六、PERMUTE

torch.permute(input, dims) → Tensor
Parameters:
input (Tensor) – the input tensor.
dims (tuple of int) – The desired ordering of dimensions

返回原始张量输入的视图,对维度重新进行排列。
在这里插入图片描述

七、RESHAPE

torch.reshape(input, shape) → Tensor
Parameters:
input (Tensor) – the tensor to be reshaped
shape (tuple of int) – the new shape

返回一个与输入相同的数据和元素数量的张量,但具有指定的形状。在可能的情况下,返回的张量将是输入的视图。否则,它将是一个副本。具有连续内存布局和兼容步幅的输入可以在不复制的情况下重新形状,但不应依赖于复制与视图的行为。
请参阅 torch.Tensor.view(),了解何时可能返回视图。
单个维度可以为 -1,在这种情况下,它将从剩余维度和输入中的元素数量中推断出。
在这里插入图片描述

八、SELECT

torch.select(input, dim, index) → Tensor
Parameters:
input (Tensor) – the input tensor.
dim (int) – the dimension to slice
index (int) – the index to select with

沿着给定索引在选定的维度上对输入张量进行切片。此函数返回原始张量的视图,其中删除了给定的维度。
注意:
如果输入是稀疏张量,并且无法返回张量的视图,则会引发 RuntimeError 异常。在这种情况下,考虑使用 torch.select_copy() 函数。
select() 等同于切片。例如,tensor.select(0, index) 等同于 tensor[index],而 tensor.select(2, index) 等同于 tensor[:,:,index]。

九、SPLIT

torch.split(tensor, split_size_or_sections, dim=0)
Parameters:
tensor (Tensor) – tensor to split.
split_size_or_sections (int) or (list(int)) – size of a single chunk or list of sizes for each chunk
dim (int) – dimension along which to split the tensor.
Return type:
Tuple[Tensor, …]

将张量分割成块。每个块都是原始张量的视图。
如果 split_size_or_sections 是整数类型,则张量将被均匀分割成大小相等的块(如果可能的话)。如果沿着给定的维度 dim 的张量大小不能被 split_size 整除,最后一个块将更小。
如果 split_size_or_sections 是一个列表,则张量将根据列表中的元素在维度 dim 上分割为具有相应大小的块。
在这里插入图片描述

十、SQUEEZE

torch.squeeze(input, dim=None) → Tensor
Parameters:
input (Tensor) – the input tensor.
dim (int or tuple of ints, optional) –if given, the input will be squeezed
only in the specified dimensions.

返回一个将输入张量中所有指定维度大小为1的维度移除的张量。
例如,如果输入的形状为:
(A×1×B×C×1×D)
那么 input.squeeze() 的形状将为:
(A×B×C×D)
当指定了 dim 参数时,squeeze 操作只在给定的维度中执行。如果输入的形状为:
(A×1×B)
那么 squeeze(input, 0) 将保持张量不变,但 squeeze(input, 1) 将使张量的形状变为:
(A×B)
注意:
返回的张量与输入张量共享存储,因此更改其中一个的内容将更改另一个的内容。
警告:
如果张量具有大小为1的批处理维度,那么 squeeze(input) 也会删除批处理维度,这可能导致意外的错误。考虑仅指定要挤压的维度。
在这里插入图片描述

十一、T

torch.t(input) → Tensor
Parameters:
input (Tensor) – the input tensor.

期望输入为 <= 2-D 张量,并转置维度 0 和 1。
0-D 和 1-D 张量保持不变。当输入为 2-D 张量时,这等效于 transpose(input, 0, 1)。
在这里插入图片描述

十二、TAKE

torch.take(input, index) → Tensor
Parameters:
input (Tensor) – the input tensor.
index (LongTensor) – the indices into tensor

返回一个新的张量,该张量包含输入张量在给定索引处的元素。输入张量被视为一个 1-D 张量。结果的形状与索引相同。
在这里插入图片描述

十三、TILE

torch.tile(input, dims) → Tensor
Parameters:
input (Tensor) – the tensor whose elements to repeat.
dims (tuple) – the number of repetitions per dimension.

通过重复输入的元素构造一个张量。dims 参数指定每个维度的重复次数。
如果 dims 指定的维度少于输入的维度,则在 dims 前面添加 1 直到所有维度都被指定。例如,如果输入的形状为 (8, 6, 4, 2),而 dims 为 (2, 2),那么 dims 就被视为 (1, 1, 2, 2)。
类似地,如果输入的维度少于 dims 指定的维度,则将输入视为在维度零处插入 1,直到具有与 dims 指定的维度相同。例如,如果输入的形状为 (4, 2),而 dims 为 (3, 3, 2, 2),那么输入就被视为具有形状 (1, 1, 4, 2)。
注意:
这个函数类似于 NumPy 的 tile 函数。
在这里插入图片描述

十四、TRANSPOSE

torch.transpose(input, dim0, dim1) → Tensor
Parameters:
input (Tensor) – the input tensor.
dim0 (int) – the first dimension to be transposed
dim1 (int) – the second dimension to be transposed

返回一个张量,该张量是输入的转置版本。给定的维度 dim0 和 dim1 被交换。
如果输入是一个分步张量(strided tensor),那么生成的输出张量与输入张量共享其基础存储,因此更改其中一个的内容将更改另一个的内容。
如果输入是一个稀疏张量,则生成的输出张量与输入张量不共享基础存储。
如果输入是具有压缩布局(SparseCSR、SparseBSR、SparseCSC 或 SparseBSC)的稀疏张量,则参数 dim0 和 dim1 必须同时是批处理维度或同时是稀疏维度。稀疏张量的批处理维度是稀疏维度之前的维度。
注意:
交换 SparseCSR 或 SparseCSC 布局张量的稀疏维度将导致布局在两种选项之间变化。类似地,转置 SparseBSR 或 SparseBSC 布局张量的稀疏维度将生成具有相反布局的结果。在这里插入图片描述

十五、UNBIND

torch.unbind(input, dim=0) → seq
Parameters:
input (Tensor) – the tensor to unbind
dim (int) – dimension to remove

移除张量的一个维度。返回沿着给定维度的所有切片的元组,这些切片已经没有该维度。
在这里插入图片描述

十六、UNSQUEEZE

torch.unsqueeze(input, dim) → Tensor
Parameters:
input (Tensor) – the input tensor.
dim (int) – the index at which to insert the singleton dimension

返回一个在指定位置插入大小为一的维度的新张量。
返回的张量与此张量共享相同的基础数据。
可以使用范围在 [-input.dim() - 1, input.dim() + 1) 内的 dim 值。负的 dim 将对应于在 dim = dim + input.dim() + 1 处应用 unsqueeze()。

在这里插入图片描述

十七、WHERE

*torch.where(condition, input, other, , out=None) → Tensor
Parameters:
condition (BoolTensor) – When True (nonzero), yield input, otherwise yield other
input (Tensor or Scalar) – value (if input is a scalar) or values selected at indices where condition is True
other (Tensor or Scalar) – value (if other is a scalar) or values selected at indices where condition is False
Keyword Arguments:
out (Tensor, optional) – the output tensor.
Returns:
A tensor of shape equal to the broadcasted shape of condition, input, other
Return type:
Tensor

返回从输入或其他张量中选择的元素的张量,取决于条件。
该操作的定义为:
在这里插入图片描述
张量 condition、input 和 other 必须是可广播的。torch.where(condition) → tuple of LongTensor 与 torch.nonzero(condition, as_tuple=True) 完全相同
在这里插入图片描述

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

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

相关文章

【计算机网络】【新加坡南洋理工大学】【Computer Control Network】【广域网和局域网简介】【中英对照(自译)】

一、说明 仅供学习使用。 二、广域网&#xff08;WAN&#xff09;和局域网&#xff08;LAN&#xff09;简介

【学习心得】Git深入学习

若您还未安装Git或是只想简单使用&#xff0c;可以先看看我的文章“Git快速上手”【学习心得】Git快速上手http://t.csdnimg.cn/gsaGj 一、深入学习Git必须熟悉两个概念 &#xff08;1&#xff09;【四个区】Git本地有三个区&#xff0c;远程仓库也可以看出成一个区域 工作区…

【论文阅读】Deep Graph Contrastive Representation Learning

目录 0、基本信息1、研究动机2、创新点3、方法论3.1、整体框架及算法流程3.2、Corruption函数的具体实现3.2.1、删除边&#xff08;RE&#xff09;3.2.2、特征掩盖&#xff08;MF&#xff09; 3.3、[编码器](https://blog.csdn.net/qq_44426403/article/details/135443921)的设…

CSS实现的 Loading 效果

方式一、纯CSS实现 代码&#xff1a;根据需要复制 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>CSS Animation Library for Developers and Ninjas</title><style>/* ---------------…

.net core 6 使用注解自动注入实例,无需构造注入 autowrite4net

像java使用autowrite一样使用 1、前提先注册到ioc容器当中 builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、启用 //启用自动注入 app.UseAutoWrite(); 4、在类上使用注解 [StartAutoWrite] public class NacosController : ControllerBase 5、实例上使用注解 …

【Redis】AOF 源码

在上篇, 我们已经从使用 / 机制 / AOF 过程中涉及的辅助功能等方面简单了解了 Redis AOF。 这篇将从源码的形式, 进行深入的了解。 1 Redis 整个 AOF 主要功能 Redis 的 AOF 功能概括起来就 2 个功能 AOF 同步: 将客户端发送的变更命令, 保存到 AOF 文件中AOF 重写: 随着 Red…

新能源汽车智慧充电桩方案:基于视频监控的可视化智能监管平台

一、方案概述 TSINGSEE青犀&触角云新能源汽车智慧充电桩方案围绕互联网、物联网、车联网、人工智能、视频技术、大数据、4G/5G等技术&#xff0c;结合云计算、移动支付等&#xff0c;实现充电停车一体化、充电桩与站点管理等功能&#xff0c;达到充电设备与站点的有效监控…

橘子学K8S04之重新认识Docker容器

我们之前分别从 Linux Namespace 的隔离能力、Linux Cgroups 的限制能力&#xff0c;以及基于 rootfs 的文件系统三个角度来理解了一下关于容器的核心实现原理。 这里一定注意说的是Linux环境&#xff0c;因为Linux Docker (namespaces cgroups rootfs) ! Docker on Mac (bas…

Dockerfile镜像实战

目录 一 构建SSH镜像 1.开启ip转发功能 2. 准备工作目录 3.修改配置文件 5.启动容器并修改root密码 二 构建Systemctl镜像 1. 准备工作目录 ​编辑2.修改配置文件 3.生成镜像 4.启动容器&#xff0c;并挂载宿主机目录挂载到容器中&#xff0c;进行初始化 5.进入容器 三…

npm install 无反应 npm run serve 无反应

说明情况&#xff1a;其实最开始我就是发现我跟着黑马的苍穹外卖的前端day2的环境搭建做的时候&#xff0c;到这一步出现了问题&#xff0c;无论我怎么 npm install 和 npm run serve 都没有像黑马一样有很多东西进行加载&#xff0c;因此我换了一种方法 1.在这个文件夹下cmd …

SPI传感器接口设计与优化:基于STM32的实践

SPI&#xff08;串行外设接口&#xff09;是一种常用的串行通信协议&#xff0c;用于在微控制器和外部设备之间进行全双工的高速数据传输。在本文中&#xff0c;我们将探讨如何基于STM32微控制器设计和优化SPI传感器接口&#xff0c;并提供相应的代码示例。 1. SPI传感器接口设…

使用docker部署RStudio容器并结合内网穿透实现公网访问

文章目录 前言1. 安装RStudio Server2. 本地访问3. Linux 安装cpolar4. 配置RStudio server公网访问地址5. 公网远程访问RStudio6. 固定RStudio公网地址 前言 RStudio Server 使你能够在 Linux 服务器上运行你所熟悉和喜爱的 RStudio IDE&#xff0c;并通过 Web 浏览器进行访问…

Web Animation API

工作中经常会遇到需要动画的场景&#xff0c;连贯动画都是用CSS实现&#xff0c;&#xff0c;但是如果遇到需要用户互动介入的动画&#xff0c;那纯CSS很比较吃力&#xff0c;也不是不能实现&#xff0c;需要动态修改CSS变量&#xff0c;而且动画容易被JS代码阻塞&#xff0c;导…

mysql-实战案例 (超详细版)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

什么是小程序?特点和技术架构详解

小程序是一种新的移动应用程序格式&#xff0c;一种结合了 Web 技术以及客户端技术的混合解决方案。 传统的原生应用运行起来比较流畅&#xff0c;但是也有天然的基因缺陷&#xff1a; 不支持动态化&#xff0c;发布周期长需要开发Android和iOS两套代码&#xff0c;开发成本高…

IIS 缓存, 更新后前端资源不能更新问题

解决办法: 通常只需要index.html 不缓存即可, 其他文件都是根据index.html 中的引用去加载; 正确的做法是在 站点下增加 web.config 文件, 内容如下: 我这个是因为目录下有个config.js 配置文件, 也不能缓存, 所以加了两个 <?xml version"1.0" encoding&quo…

探索设计模式的魅力:抽象工厂模式的艺术

抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;用于在不指定具体类的情况下创建一系列相关或相互依赖的对象。它提供了一个接口&#xff0c;用于创建一系列“家族”或相关依赖对象&#xff0c;而无需指定它们的具体类。 主要参…

Verilog基础:强度建模(一)

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、强度建模基础 Verilog HDL提供了针对线网信号0、1、x、z的精准强度建模方式&#xff0c;这样可以允许将两个线网信号进行线与操作从而更加精确地描述出硬件行…

实战之-Redis商户查询缓存

一、什么是缓存? 前言:什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器",防止过高…

HANA:存储过程(Procedures) DBUG

作者 idan lian 如需转载备注出处 如果对你有帮助&#xff0c;请点赞收藏~~~ 1.场景 最近不是写了蛮多hana的存储过程吗&#xff0c;如果是简单的增删改查&#xff0c;如果结果错了&#xff0c;还是比较容易找到错误在哪的&#xff0c;但是逐渐假如循环啊&#xff0c;变量判…