张量的形状操作以及拼接

张量的形状操作函数概括

张量的形状变换操作函数

reshape()

squeeze()

unsqueeze()

transpose()

permute()

view()

contiguous()

需要掌握的函数

reshape()、unsqueeze()、permute()、view()

reshape()

在不改变内容的前提下,对其形状做改变。

注意:转换后元素总的个数不能变

python 复制代码
torch.random.manual_seed(10)
t1 = torch.randint(0,11,[2,3])
print(f"t1 = {t1}")
print(f"t1.shape = {t1.shape}")
t2  = t1.reshape(3,2)
print(f"t2 = {t2}")
print(f"t2.shape = {t2.shape}")

unsqueeze()

在指定的轴上增加一个(1)维度

python 复制代码
t1 = torch.randint(0, 11, [2, 3])
    t2 = t1.unsqueeze(0)
    print(f"t2 = {t2}")
    print(f"t2.shape = {t2.shape}")
    t3 = t1.unsqueeze(1)
    print(f"t3 = {t3}")
    print(f"t3.shape = {t3.shape}")
    t4 = t1.unsqueeze(2)
    print(f"t4 = {t4}")
    print(f"t4.shape = {t4.shape}")

squeeze()

删除所有为1的维度,等价于降维

python 复制代码
t1 = torch.randint(0, 11, [2,1,3,1,1])
    print(f"t1 = {t1}")
    print(f"t1.shape = {t1.shape}")
    t2 = t1.squeeze()
    print(f"t2 = {t2}")
    print(f"t2.shape = {t2.shape}")

transpose()和permute()

transpose() 一次只能交换2个维度

permute() 一次可以同时交换多个维度

python 复制代码
t1 = torch.randint(0, 11, [2,3,4])
    print(f"t1.shape = {t1.shape}")
    t2 = t1.transpose(0,1)
    print(f"t2.shape = {t2.shape}")
    t3 = t1.permute(2,0,1)
    print(f"t3.shape = {t3.shape}")

view()和contiguous()

view只修改连续的张量的形状(连续指的是内存的连续)

view可以改变原来的张量比如t1.view(),t1的形状也发生了改变

is_contiguous() 判断张量是否连续

contiguous() 将不连续的张量变成连续的

python 复制代码
t1 = torch.randint(0, 11, [2,3])
    t2 = t1.view(3,2)
    print(f"t2.shape = {t2.shape}")
    #通过transpose将张量变为不连续的
    t1 = t1.transpose(1,0)
    # print(f"t1.is_contiguous() = {t1.is_contiguous()}")
    # t3 = t1.view(2,3)
    # print(f"t3.shape = {t3.shape}")
    #通过contiguous()变为连续的然后再转换
    t1 = t1.contiguous()
    print(f"t1.shape = {t1.shape}")
    t4 = t1.view(2,3)
    print(f"t4.shape = {t4.shape}")

张量的拼接

cat() 不改变维度数拼接张量,除了拼接的那个维度外其它的维度必须保持一致

stack() 会改变维度,拼接张量,所有的维度都必须保持一致

拼接张量可以是新维度,但是无论新旧维度,所有维度都必须保持一致

cat()

python 复制代码
t1 = torch.randint(0,5,[3,4])
t2 = torch.randint(0,5,[2,4])
t3 = torch.cat([t1,t2],dim=0)
print(f"t3.shape = {t3.shape}")

stack()

python 复制代码
t1 = torch.randint(0,5,[2,3])
t2 = torch.randint(0,5,[2,3])
t3 = torch.stack([t1,t2],dim=0)
print(f"t3.shape:{t3.shape}")
t4 = torch.stack([t1,t2],dim=1)
print(f"t4.shape:{t4.shape}")
t5 = torch.stack([t1,t2],dim=2)
print(f"t5.shape:{t5.shape}")
相关推荐
宸津-代码粉碎机3 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
做萤石二次开发的哈哈5 小时前
视频解码器怎么对接?解码上墙、电视墙开窗与场景切换的ISAPI接入实战
人工智能·物联网·监控·视频编解码·大屏端·萤石开放平台·蓝海aiot一站式工作台
Leo.yuan5 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
长谷深风1115 小时前
Tool与Skill:AI能力设计的分水岭
java·人工智能·ai·大模型·aiagent
科技观察哨5 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
云上先途5 小时前
任务智能体可以自动完成哪些类型工作,是不是只能做简单重复操作?
大数据·人工智能
明志数科5 小时前
具身智能数据供给的分层:分布式采集与入厂采集的工程边界分析
人工智能·机器学习·机器人
像风一样自由20205 小时前
41.用FastAPI搭建一个RAG后端需要哪些接口
人工智能·大模型·fastapi·rag·智能体
小蒋观天下6 小时前
两轮车检测AI摄像头——2026行业竞争格局、商业模式与核心痛点
大数据·人工智能·安全·计算机视觉·ai大模型
RisunJan6 小时前
【这就是AI】AI每日资讯简报 - 2026-09-28(周一)
大数据·人工智能