PyTorch维度操作的函数介绍

在 PyTorch 中,操作张量的维度是常见的需求,特别是在处理多维数据时。PyTorch 提供了一系列函数来操作张量的维度,包括改变维度顺序、添加或删除维度、扩展维度等。下面是一些常用的维度操作函数及其示例代码。

1. view()

  • 作用 :重新调整张量的形状(维度),但不改变其数据内容。view() 是基于张量的原始内存布局进行操作的,要求重新调整的形状能与原始数据兼容。

  • 示例

    import torch

    创建一个形状为 [2, 3, 4] 的张量

    tensor = torch.randn(2, 3, 4)

    调整为形状为 [6, 4] 的张量

    reshaped = tensor.view(6, 4)
    print(reshaped.shape) # 输出: torch.Size([6, 4])

2. permute()

  • 作用:重新排列张量的维度顺序。

  • 示例

    import torch

    创建一个形状为 [2, 3, 4] 的张量

    tensor = torch.randn(2, 3, 4)

    交换第一个维度和第二个维度,得到形状为 [3, 2, 4] 的张量

    permuted = tensor.permute(1, 0, 2)
    print(permuted.shape) # 输出: torch.Size([3, 2, 4])

3. unsqueeze()

  • 作用:在指定位置插入一个大小为 1 的新维度。

  • 示例

    import torch

    创建一个形状为 [3, 4] 的张量

    tensor = torch.randn(3, 4)

    在第 0 维添加一个新维度,结果形状为 [1, 3, 4]

    unsqueezed = tensor.unsqueeze(0)
    print(unsqueezed.shape) # 输出: torch.Size([1, 3, 4])

4. squeeze()

  • 作用:移除张量中所有大小为 1 的维度。

  • 示例

    import torch

    创建一个形状为 [1, 3, 1, 4] 的张量

    tensor = torch.randn(1, 3, 1, 4)

    移除所有大小为 1 的维度,结果形状为 [3, 4]

    squeezed = tensor.squeeze()
    print(squeezed.shape) # 输出: torch.Size([3, 4])

5. transpose()

  • 作用:交换张量的两个指定维度。

  • 示例

    import torch

    创建一个形状为 [2, 3, 4] 的张量

    tensor = torch.randn(2, 3, 4)

    交换第 1 维和第 2 维,结果形状为 [2, 4, 3]

    transposed = tensor.transpose(1, 2)
    print(transposed.shape) # 输出: torch.Size([2, 4, 3])

6. expand()

  • 作用:将张量的某些维度扩展为更大的尺寸,不会复制数据,而是通过广播机制扩展。

  • 示例

    import torch

    创建一个形状为 [2, 1, 4] 的张量

    tensor = torch.randn(2, 1, 4)

    扩展第 1 维到大小为 3,结果形状为 [2, 3, 4]

    expanded = tensor.expand(2, 3, 4)
    print(expanded.shape) # 输出: torch.Size([2, 3, 4])

7. repeat()

  • 作用:沿着指定的维度重复张量的元素。

  • 示例

    import torch

    创建一个形状为 [2, 3] 的张量

    tensor = torch.randn(2, 3)

    沿着第 0 维和第 1 维分别重复 2 次和 3 次,结果形状为 [4, 9]

    repeated = tensor.repeat(2, 3)
    print(repeated.shape) # 输出: torch.Size([4, 9])

8. cat()

  • 作用:在指定维度上连接多个张量。

  • 示例

    import torch

    创建两个形状为 [2, 3] 的张量

    tensor1 = torch.randn(2, 3)
    tensor2 = torch.randn(2, 3)

    在第 0 维连接,结果形状为 [4, 3]

    concatenated = torch.cat([tensor1, tensor2], dim=0)
    print(concatenated.shape) # 输出: torch.Size([4, 3])

9. stack()

  • 作用:在新的维度上堆叠多个张量。

  • 示例

    import torch

    创建两个形状为 [2, 3] 的张量

    tensor1 = torch.randn(2, 3)
    tensor2 = torch.randn(2, 3)

    在新的第 0 维堆叠,结果形状为 [2, 2, 3]

    stacked = torch.stack([tensor1, tensor2], dim=0)
    print(stacked.shape) # 输出: torch.Size([2, 2, 3])

总结

PyTorch 提供了丰富的维度操作函数,使得张量的操作非常灵活。在处理多维数据时,合理使用这些函数可以极大地简化代码,并提高数据处理的效率。

相关推荐
清水白石0083 小时前
隔离的艺术:用 `unittest.mock` 驯服外部依赖,让测试真正可控
python
gorgeous(๑>؂<๑)3 小时前
【ICLR26-金玥明-新国立】MedAgent-Pro:通过推理智能体工作流实现基于证据的多模态医疗诊断
人工智能
hqyjzsb3 小时前
企业AI人才库的搭建体系与长效运营管理方案
人工智能·学习·职场和发展·创业创新·学习方法·业界资讯·改行学it
码农小韩3 小时前
AIAgent应用开发——大模型理论基础与应用(五)
人工智能·python·提示词工程·aiagent
拔刀能留住落樱吗、3 小时前
AI 落地避坑实战(2026 最新):200 + 项目复盘,数据 + 方案 + 代码思路,少亏 50 万
人工智能
龙山云仓3 小时前
No160:AI中国故事-对话耿恭——孤城坚守与AI韧性:极端环境与信念之光
大数据·人工智能·机器学习
百锦再3 小时前
Java中的char、String、StringBuilder与StringBuffer 深度详解
java·开发语言·python·struts·kafka·tomcat·maven
Dcs3 小时前
花 200 美刀买“黑盒”?Claude Code 这波更新,把程序员当傻子了吧…
人工智能·ai编程·claude
Mr_Lucifer4 小时前
成本大幅降低、Agent效率显著提升:CodeFlicker 接入 MiniMax M2.5 与 GLM-5
人工智能·ai编程·产品
Jonathan Star4 小时前
Ant Design (antd) Form 组件中必填项的星号(*)从标签左侧移到右侧
人工智能·python·tensorflow