【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) 完全相同
在这里插入图片描述

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

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

相关文章

【DC-DC】APS54085降压恒流 高辉度调光降压恒流芯片

产品描述 APS54085 是一款 PWM 工作模式,高效率、 外围简单、内置功率 MOS 管&#xff0c;适用于 5-100V 输入的高精度降压 LED 恒流驱动芯片。最大电流 2.0A。 APS54085 可实现线性调光和 PWM 调光&#xff0c; 线性调光有效电压范围 0.52-2.55V. PWM 调光频率范围 100…

山西电力市场日前价格预测【2024-01-19】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-01-19&#xff09;山西电力市场全天平均日前电价为499.01元/MWh。其中&#xff0c;最高日前电价为898.49元/MWh&#xff0c;预计出现在18:00。最低日前电价为373.35元/MWh&#xff0c;预计…

elasticsearch 中热词使用遇到的坑

在使用es检索时,一般会创建索引以及索引下mapping和setting一样配置,如下: 命令创建配置方式: PUT /my_index { "settings": { "number_of_shards": 1 }, "mappings": { "properties": { "title": { …

k8s的对外服务--ingress

service作用体现在两个方面 1、集群内部 不断跟踪pod的变化&#xff0c;更新endpoint中的pod对象&#xff0c;基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器&#xff0c;把流量ip端口&#xff0c;不涉及转发url&#xff08;http&#xff0c;https&a…

Docker-02-镜像项目部署

Docker-02-镜像&项目部署 文章目录 Docker-02-镜像&项目部署一、镜像①&#xff1a;镜像结构②&#xff1a;Dockerfile③&#xff1a;构建镜像01&#xff1a;构建02&#xff1a;查看镜像列表03&#xff1a;运行镜像 二、网络①&#xff1a;容器的网络IP地址②&#xff…

《如何制作类mnist的金融数据集》——0.背景

0&#xff0e;背景 最近在金融人工智能领域进行了研究。由于金融领域数据集的欠缺&#xff0c;因此需要根据其领域中的各种数据的特征进行相应数据集的制作。 下图所示是一篇关于金融与预测的论文&#xff0c;题目为&#xff1a;《预测自动交易的财务信号:一个可解释的方法》。…

分享用is_sorted()解决单调数列问题

题目名称 896. 单调数列 目录 题目名称 896. 单调数列 1.题目 2.题目分析 3.题目知识 3.1 is_sorted() 3.2.迭代器与反向迭代器 3.2.1理解迭代器 3.2.2正向迭代器 3.2.3反向迭代器 最后&#x1f368; 推荐阅读顺序: 1.题目->2.题目分析->3.题目知识点 1.题目 如…

AI新工具(20240118):AlphaGeometry解答国际数学奥林匹克竞赛中的几何问题

AlphaGeometry AlphaGeometry是由谷歌旗下的DeepMind团队开发的一款人工智能系统&#xff0c;它能够解决国际数学奥林匹克竞赛&#xff08;IMO&#xff09;的几何题。AlphaGeometry模型通过神经语言模型和符号推理引擎相结合的方式&#xff0c;实现了复杂的几何定理证明。该模…

My CUDA Note

1. CUDA中的grid和block基本的理解 Kernel: Kernel不是CPU&#xff0c;而是在GPU上运行的特殊函数。你可以把Kernel想象成GPU上并行执行的任务。当你从主机&#xff08;CPU&#xff09;调用Kernel时&#xff0c;它在GPU上启动&#xff0c;并在许多线程上并行运行。 Grid: 当你…

Chondrex:Glycosaminoglycans Assay Kit(糖胺聚糖检测试剂盒)

糖胺聚糖&#xff08;glycosaminoglycans&#xff0c;GAGs&#xff09;是一种携带负电荷的多糖链&#xff0c;位于大多数结缔组织和许多不同类型细胞的细胞外基质&#xff08;extracellular matrices, ECM&#xff09;中以及细胞表面上。由重复双糖单位复合构成的糖胺聚糖可分为…

动态住宅代理IP是什么?如何配置使用?

动态住宅代理IP&#xff0c;作为一种高效的网络工具&#xff0c;不仅能够为您的在线活动提供额外的保护层&#xff0c;还能增强匿名性和数据安全。接下来将深入探讨动态住宅代理IP的定义、设置步骤、以及它如何有效保护您的网络隐私和安全。 一、动态住宅代理是什么&#xff1f…

尚硅谷Nginx高级配置笔记

写在前面&#xff1a;本笔记是学习尚硅谷nginx可成的时候的笔记&#xff0c;不是原创&#xff0c;如有需要&#xff0c;可以去官网看视频&#xff0c;以下是pdf文件 Nginx高级 第一部分&#xff1a;扩容 通过扩容提升整体吞吐量 1.单机垂直扩容&#xff1a;硬件资源增加 云…

前端react入门day04-useEffect与Hook函数

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 useEffect 的使用 useEffect 的概念理解 useEffect 依赖项参数说明 useEffect — 清除副作用 自定义Ho…

小程序中使用上传图片,显示、删除、预览

一、功能介绍 需要哦用户点击加号上传图片&#xff0c;并展示所上传图片和能够删除和预览 二、功能实现 采用的uniapp&#xff0c;创建了一个view容器包裹加号图标和展示的图片。 内部展示图片超过9张时候&#xff0c;加号图片隐藏 <view class"img-list">/…

【Vue】Vue 路由的配置及使用

目录捏 前言一、路由是什么&#xff1f;1.前端路由2.后端路由 二、路由配置1.安装路由2.配置路由 三、路由使用1.route 与 router2. 声明式导航3. 指定组件的呈现位置 四、嵌套路由&#xff08;多级路由&#xff09;五、路由重定向1.什么是路由重定向&#xff1f;2.设置 redire…

asp.net mvc framework 4.8 升级到 net 8.0

首先仔细阅读官方给出的升级文档这是地址 简介 - Training | Microsoft Learn 跟据文档中的操作升级 升级之后可能会有大量报错&#xff0c;将报错都改好&#xff0c;运行 如果能正常运行起来那么恭喜你&#xff0c;一般是会有问题 我遇到的问题是项目启动不了&#xff0c…

recyclerview滚动辅助器,每次横向滚动展示完整的item

简洁&#xff1a; RecyclerView在24.2.0版本中新增了SnapHelper这个辅助类&#xff0c;用于辅助RecyclerView在滚动结束时将Item对齐到某个位置。特别是列表横向滑动时&#xff0c;很多时候不会让列表滑到任意位置&#xff0c;而是会有一定的规则限制&#xff0c;这时候就可以…

运维平台介绍:视频智能运维平台的视频质量诊断分析和监控中心

目 录 一、概述 二、框架图 1、图像过亮检测&#xff1a; 2、图像模糊检测&#xff1a; 3、画面冻结检测&#xff1a; 4、信号缺失检测&#xff1a; 5、图像偏色检测&#xff1a; 6、噪声干扰检测&#xff1a; 7、条纹干扰检测&#xff1a; 三、监控中心模…

微服务入门 | 项目分割 | 远程调度Feign | 用户中心erueka 和 nacos

认识微服务 微服务架构演变&#xff1a; 单体架构&#xff1a;所有功能集中在一个项目中开发&#xff0c;打成一个包部署 分布式架构&#xff1a;就是各功能模块的代码不在同一个项目中写了&#xff0c;到时候修改其中一个过能的代码&#xff0c;对另一个功能完全没有任何影响…

dp专题13 零钱兑换II

本题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 根据题意&#xff0c;这是一道很裸的背包问题&#xff0c;其中这里是返回 背包方案数 的。 我们可以直接推出公式 &#xff1a; dp [ j ] dp[ j - coins[ i ] ] 在我之前…