pytorch学习(十三)torch维度变换

包含了flatten、view reshape transpose permute squeeze unsqueeze cat stack;在琢磨一遍之后就比较好理解了。

1.代码

复制代码
import torch
import numpy as np

#生成一个2组3行4列的数据
data = torch.randn((2,3,4))
print("data.shape:\n",data.shape)
print("data:\n",data)

#对数据进行压平,行以及行以后的维度全部展平
#具体的就是一行一行的排列起来
flatten_data = torch.flatten(data,start_dim=1)
print("flatten_data:\n",flatten_data)

#可以这样想,原来的数据展成一行,然后每4个数据构成一行,每两行构成一组,最后构成三组
view_data = data.view((3,2,4))
print("view_data:\n",view_data)

#和view基本一致的用法和功能
reshape_data = torch.reshape(data,(3,2,4))
print("reshape_data:\n",reshape_data)

#transpose每次只能转换两个维度
#表示沿着组的方向, 变成了行,沿组方向也就是[0,0,:] 和[1,0,:]变成了一个组
transpose_data1 = torch.transpose(data,1,0)
print("transpose_data1:\n",transpose_data1)

#表示沿组的方向变成了列,也就是[:,0,0]变成了一行数据,结合着[:,1,0],[:,2,0]变成了一组数据
transpose_data2 = torch.transpose(data,2,0)
print("transpose_data2:\n",transpose_data2)

#这个可以同时变换多个维度
#这个要怎么理解呢?
#x轴变成了y轴,y轴变成了z轴,z轴变成了x轴
#无论怎么变化,记清楚 x方向是一行,y方向是一列,z方向是一组就可以了
permute_data = data.permute(2,0,1)
print("permute_data:\n",permute_data)

#在指定的维度上升一个维度
squeeze_data = torch.squeeze(data,dim=0)
print("squeeze_data:\n",squeeze_data)

#去掉维度为1的维度
unsqueeze_data = torch.unsqueeze(squeeze_data,dim=0)
print("unsqueeze_data:\n",unsqueeze_data)

#
x1 = torch.tensor([[11, 21, 31], [21, 31, 41]], dtype=torch.int)
x1.shape  # torch.Size([2, 3])
print(x1)
# x2
x2 = torch.tensor([[12, 22, 32], [22, 32, 42]], dtype=torch.int)
x2.shape  # torch.Size([2, 3])
print(x2)
x3 =torch.cat((x1,x2),0)  #按维数0(行)拼接
print("按行拼接:\n",x3)

x4 =torch.cat((x1,x2),1)  #按维数0(行)拼接
print("按列拼接:\n",x4)

#0的时候是升维度
#非0的时候就是升维度后,0和 设置到dim中,其他的按顺序前移动一个
#比如 0  1  2 现在dim=1 那么0跑到1位置,1往前移动一个,变成了 1 0 2
#比如 0 1 2 现在dim=2, 那么0跑到了2位置,1 2 顺势前移动一个位置,变成了 1 2 0
a = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = torch.tensor([[11, 22, 33], [44, 55, 66], [77, 88, 99]])
c = torch.stack([a, b], 0)
d = torch.stack([a, b], 1) #看来就是把
e = torch.stack([a, b], 2)
print("升维度拼接:\n",c)
print("拼接-类比与c.permute(1,0,2):\n",d)
print("拼接-类似于c.permute(1,2,0):\n",e)
print("c11",c.permute(1,0,2))
print("c11",c.permute(1,2,0))
相关推荐
Navicat中国29 分钟前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI1 小时前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区1 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris3 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy3 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V3 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI3 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技3 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据4 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
冬奇Lab4 小时前
开源项目第242期:HyperFrames —— 写 HTML 就能渲染视频,专为 AI Agent 设计的确定性视频框架
人工智能·开源·音视频开发