当前位置: 首页 > news >正文

PyTorch torch.unbind、torch.split 和 torch.chunk函数介绍

pytorch中 torch.unbind、torch.split 和 torch.chunk等函数可用于张量的拆分操作。

1. torch.unbind

功能说明:
torch.unbind 沿指定的维度将张量“解包”为多个张量,返回一个元组。解包后被操作的那个维度会消失,每个输出张量的维度数会比原张量少 1。

函数签名:

torch.unbind(input, dim=0)
  • input: 待解包的张量。
  • dim: 指定沿哪个维度解包。

多维张量示例:

import torch# 创建一个形状为 (2, 3, 4) 的张量
x = torch.arange(24).reshape(2, 3, 4)
print("原始张量 x:\n", x)
print("x.shape:", x.shape)  # torch.Size([2, 3, 4])# 沿第 0 维解包
slices0 = torch.unbind(x, dim=0)
print("\n沿 dim=0 解包:")
for i, t in enumerate(slices0):print(f"slice {i} shape: {t.shape}")# 每个张量形状为 (3, 4)# 沿第 1 维解包
slices1 = torch.unbind(x, dim=1)
print("\n沿 dim=1 解包:")
for i, t in enumerate(slices1):print(f"slice {i} shape: {t.shape}")# 每个张量形状为 (2, 4)

2. torch.split

功能说明:
torch.split 根据给定的大小或尺寸列表,将张量沿指定维度切分成若干块。

  • 如果传入一个整数,则每块的大小为该整数,最后一块可能会小于这个整数。
  • 如果传入一个尺寸列表,则按列表中指定的尺寸进行切分。

函数签名:

torch.split(tensor, split_size_or_sections, dim=0)
  • tensor: 待分割的张量。
  • split_size_or_sections: 整数或尺寸列表,指定每块的大小。
  • dim: 指定沿哪个维度进行切分。

多维张量示例:

import torch# 创建一个形状为 (2, 5, 4) 的张量
x = torch.arange(40).reshape(2, 5, 4)
print("原始张量 x:\n", x)
print("x.shape:", x.shape)  # torch.Size([2, 5, 4])# 按照固定大小进行切分:沿第 1 维,每块大小为 2
splits_fixed = torch.split(x, 2, dim=1)
print("\n沿 dim=1 按固定大小 2 切分:")
for i, t in enumerate(splits_fixed):print(f"chunk {i} shape: {t.shape}")# 输出块的形状可能为 (2, 2, 4), (2, 2, 4) 和最后一块 (2, 1, 4)# 按照指定尺寸列表进行切分:沿第 1 维,分块尺寸为 [1, 2, 2]
splits_list = torch.split(x, [1, 2, 2], dim=1)
print("\n沿 dim=1 按尺寸列表 [1, 2, 2] 切分:")
for i, t in enumerate(splits_list):print(f"chunk {i} shape: {t.shape}")# 分别输出形状 (2, 1, 4), (2, 2, 4), (2, 2, 4)

3. torch.chunk

功能说明:
torch.chunk 将张量沿指定维度平均分成指定数量的块。如果张量在该维度上的长度不能被块数整除,则前面的块会比后面块多一个元素(块的尺寸差别最多为 1)。

函数签名:

torch.chunk(tensor, chunks, dim=0)
  • tensor: 待分割的张量。
  • chunks: 指定分成几块。
  • dim: 指定沿哪个维度进行分块。

多维张量示例:

对比总结

函数分割方式返回结果形式适用场景
torch.unbind沿指定维度将张量完全解包,每个输出不含该维度元组,输出张量数 = 该维度的长度需要逐个处理某一维度上的切片,且希望移除该维度时使用。
torch.split按照指定大小或尺寸列表切分张量元组或列表需要按固定大小或自定义尺寸列表切分张量,最后一块可能不均匀。
torch.chunk将张量均匀分成指定数量的块元组或列表希望将张量平均分成若干块,块数固定,自动处理无法整除的情况。

注意:

  • 当处理多维张量时,选择沿哪一维进行分割非常重要;
  • torch.unbind 会移除分割的那个维度,而 torch.split 和 torch.chunk 则保持原始维度,只是该维度上的大小发生变化。

通过这些示例代码和说明,你可以根据具体需求选择合适的函数来分割多维张量。

http://www.lryc.cn/news/533067.html

相关文章:

  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》061-Vue Router的动态路由
  • 杭州某小厂面试
  • C基础寒假练习(8)
  • 设计模式 ->模板方法模式(Template Method Pattern)
  • Redis存储⑤Redis五大数据类型之 List 和 Set。
  • MySQL开窗函数种类和使用总结
  • DeepSeek——DeepSeek模型部署实战
  • zsh: command not found: pip
  • 机器学习数学基础:16.方程组
  • 即梦(Dreamina)技术浅析(四):生成对抗网络
  • 2025年软件测试五大趋势:AI、API安全、云测试等前沿实践
  • Vue混入(Mixins)与插件开发深度解析
  • 【C++】C++11
  • k8sollama部署deepseek-R1模型,内网无坑
  • mysql8 C++源码中创建表函数,表字段最大数量限制,表行最大存储限制
  • 胜任力冰山模型:深入探索职业能力的多维结构
  • 什么是三层交换技术?与二层有什么区别?
  • Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 替代】
  • DeepSeek LLM(初代)阅读报告
  • JAVA异步的TCP 通讯-服务端
  • 高效协同,Tita 助力项目管理场景革新
  • 【AIGC魔童】DeepSeek v3提示词Prompt书写技巧
  • Vue | 透传 Attributes(非 prop 的 attribute )
  • 启明星辰发布MAF大模型应用防火墙产品,提升DeepSeek类企业用户安全
  • Vuex 解析:从 Vue 2 到 Vue 3 的演变与最佳实践
  • 一文解释nn、nn.Module与nn.functional的用法与区别
  • 日志统计(acWing,蓝桥杯)
  • 3个DeepSeek隐藏玩法
  • 部署LLM模型到云端
  • Python连接不同数据库的总结