pytorch tensor维度变换

目录

  • [1. view/reshape](#1. view/reshape)
  • [2. squeeze/unsqueeze](#2. squeeze/unsqueeze)
  • [3. expand 扩展](#3. expand 扩展)
  • [4. repeat](#4. repeat)
  • [5 .t转置](#5 .t转置)
  • [6. transpose](#6. transpose)
  • [7. permute](#7. permute)

1. view/reshape

view(*shape) → Tensor

作用:类似于reshape,将tensor转换为指定的shape,原始的data不改变。返回的tensor与原始的tensor共享存储区。返回的tensor的size和stride必须与原始的tensor兼容。每个新的tensor的维度必须是原始维度的子空间,或满足以下连续条件:

式1 张量连续性条件

否则需要先使用contiguous()方法将原始tensor转换为满足连续条件的tensor,然后就可以使用view方法进行shape变换了。或者直接使用reshape方法进行维度变换,但这种方法变换后的tensor就不是与原始tensor共享内存了,而是被重新开辟了一个空间。

torch.reshape(input, shape) → Tensor

与view方法类似,将输入tensor转换为新的shape格式。

但是reshape方法更强大,可以认为a.reshape = a.view() + a.contiguous().view()。

即:在满足tensor连续性条件时,a.reshape返回的结果与a.view()相同,否则返回的结果与a.contiguous().view()相同。

view/reshape的问题是会丢失维度信息,比如变化后的数据[4,784],而通过它是推不出原来的shape是[4,1,28*28]的,必须额外保存维度信息。

参考:【pytorch】view和reshape底层原理

2. squeeze/unsqueeze

unsqueeze增加维度,索引>=0时在索引之前插入,索引<0时,在索引之后插入

unsqueeze只改变维度不改变数据本身

实际应用的例子

squeeze减少维度,减少掉维度为1的维度,不输入参数时,它会减少掉所有能减掉的维度

3. expand 扩展

用于将张量中单数维的数据扩展到指定的size

只有维度是1的才可以扩展,当expand参数为-1时,保持原来的维度不扩展,负数其他值无意思。且扩展的Tensor不会分配新的内存,只是原来的基础上创建新的视图并返回,返回的张量内存是不连续的。类似于numpy中的broadcast_to函数的作用。如果希望张量内存连续,可以调用contiguous函数。

4. repeat

和expand()作用类似,均是将tensor扩展到新的形状

前文提及expand仅能作用于单数维,那对于非单数维的拓展,那就需要借助于repeat函数了。

tensor.repeat(sizes)参数 sizes指定了原始张量在各维度上复制的次数。整个原始张量作为一个整体进行复制,这与Numpy中的repeat函数截然不同,而更接近于tile函数的效果。

与expand不同,repeat函数会真正的复制数据并存放于内存中。repeat开辟了新的内存空间,torch.repeat返回的张量在内存中是连续的

5 .t转置

用于二维及以下的tensor转置

6. transpose

transpose方法的作用是交换矩阵的两个维度,transpose(dim0, dim1) → Tensor,transpose可能导致数据不连续,可调用.contiguous使数据变的连续

7. permute

torch.permute(input, dims) → Tensor

按照dims给定的dimension排列顺序,返回Tensor
t只用于二维及以下的tensor转置,transpose能操作2D矩阵的转置,在多维矩阵可以进行二维的转置,permute可对任意高维矩阵进行转置

相关推荐
码界筑梦坊10 分钟前
基于大数据的美团外卖数据可视化分析系统
大数据·python·信息可视化
Dm_dotnet26 分钟前
AI工具推荐:使用AnythingLLM帮助你学习
人工智能
钡铼技术物联网关1 小时前
ARM架构+CODESYS:解锁嵌入式边缘计算的实时控制新范式
大数据·linux·arm开发·人工智能·边缘计算
小柚净静1 小时前
什么是边缘计算?
人工智能·边缘计算
说私域1 小时前
数字化转型中的开源AI智能客服与S2B2C商城小程序的融合创新
人工智能·小程序·开源·零售
五号厂房1 小时前
OpenManus源码剖析-探索智能体框架的设计与实现
人工智能
重生之我要成为代码大佬1 小时前
从零讲透DFS-深度优先搜索-2(排序与组合)
开发语言·python·算法·深度优先遍历
那年那棵树1 小时前
【爬虫】网易云音乐评论数据爬取
javascript·爬虫·python
日升_rs1 小时前
Browser-use:基于 Python 的智能浏览器自动化 AI 工具调研与实战
python·ai·浏览器
飞哥数智坊1 小时前
Claude3.7秒出架构图,你再不用就真的Out了
人工智能·claude