深度学习02-pytorch-02-张量的拼接操作

在 PyTorch 中,张量的拼接操作可以通过以下几种主要方法来实现,最常用的包括 torch.cat(), torch.stack(), 以及 torch.chunk()。这些操作可以将多个张量沿某个维度拼接在一起或拆分张量。下面将详细介绍如何使用这些操作。

1. torch.cat()

torch.cat() 是最常用的拼接函数,它沿着指定维度将张量拼接在一起。需要确保拼接时除拼接维度外的其他维度大小相同。

python 复制代码
import torch
​
# 定义两个形状为 (2, 3) 的张量
tensor1 = torch.randn(2, 3)
tensor2 = torch.randn(2, 3)
​
# 沿着维度 0 进行拼接 (行方向)
concat_tensor = torch.cat((tensor1, tensor2), dim=0)
print(concat_tensor.size())  # 输出: torch.Size([4, 3])
​
# 沿着维度 1 进行拼接 (列方向)
concat_tensor = torch.cat((tensor1, tensor2), dim=1)
print(concat_tensor.size())  # 输出: torch.Size([2, 6])

注意:在使用 torch.cat() 时,拼接的张量在除拼接维度外的其他维度必须相同。

2. torch.stack()

torch.stack() 会在新的维度上将多个张量堆叠在一起,返回的张量维度会比输入张量多一维。

python 复制代码
# 定义两个形状为 (2, 3) 的张量
tensor1 = torch.randn(2, 3)
tensor2 = torch.randn(2, 3)
​
# 在维度 0 进行堆叠
stacked_tensor = torch.stack((tensor1, tensor2), dim=0)
print(stacked_tensor.size())  # 输出: torch.Size([2, 2, 3])
​
# 在维度 1 进行堆叠
stacked_tensor = torch.stack((tensor1, tensor2), dim=1)
print(stacked_tensor.size())  # 输出: torch.Size([2, 2, 3])

cat() 不同,stack() 会增加一个新的维度。

3. torch.chunk()

torch.chunk() 将张量按指定的数量切分成多个张量。

python 复制代码
tensor = torch.randn(4, 6)  # 形状为 (4, 6)
​
# 将张量沿着第 1 维切分成 2 份
chunks = torch.chunk(tensor, 2, dim=1)
for chunk in chunks:
   print(chunk.size())  # 输出两个 (4, 3) 的张量

4. torch.split()

torch.split() 按照指定的大小切分张量。

python 复制代码
tensor = torch.randn(4, 6)
​
# 将张量沿着第 1 维,按照每块大小为 2 切分
splits = torch.split(tensor, 2, dim=1)
for split in splits:
   print(split.size())  # 输出三个 (4, 2) 的张量

5. torch.hstack()torch.vstack()

这些函数分别是 torch.cat() 在水平方向(列方向)和垂直方向(行方向)的简便形式。

python 复制代码
# 水平堆叠
hstacked_tensor = torch.hstack((tensor1, tensor2))
print(hstacked_tensor.size())  # 输出: torch.Size([2, 6])
​
# 垂直堆叠
vstacked_tensor = torch.vstack((tensor1, tensor2))
print(vstacked_tensor.size())  # 输出: torch.Size([4, 3])

总结:

  • torch.cat():沿某一维度拼接张量。

  • torch.stack():在新维度上堆叠张量。

  • torch.chunk():按指定份数拆分张量。

  • torch.split():按指定大小拆分张量。

  • torch.hstack() / torch.vstack():简便的横向和纵向拼接方法。

根据不同的场景选择合适的拼接或拆分方式。

torch.cat(), torch.stack(), torch.hstack(), torch.vstack() 等函数都可以用于拼接多个张量。它们的功能稍有不同,主要是在拼接的方式和增加新维度上有所差别:

  1. torch.cat(): 沿着现有维度拼接多个张量,不会增加新的维度。

    • 适合需要在某个维度上连接多个张量的情况。
  2. torch.stack(): 在指定的维度上增加一个新维度,然后堆叠张量。

    • 适合需要在新维度上堆叠多个张量的情况。
  3. torch.hstack() : 沿水平方向(列方向)拼接多个张量,本质上是 torch.cat()dim=1 的简写。

    • 适合将张量沿列方向拼接。
  4. torch.vstack() : 沿垂直方向(行方向)拼接多个张量,本质上是 torch.cat()dim=0 的简写。

    • 适合将张量沿行方向拼接。

这些函数都可以用于拼接多个张量,不过需要注意的是,拼接时要确保除拼接维度以外,其他维度大小相同。例如,使用 torch.cat() 沿维度 0 拼接时,所有张量的列数需要相同。

相关推荐
千澜空19 分钟前
celery在django项目中实现并发任务和定时任务
python·django·celery·定时任务·异步任务
学习前端的小z21 分钟前
【AIGC】如何通过ChatGPT轻松制作个性化GPTs应用
人工智能·chatgpt·aigc
斯凯利.瑞恩26 分钟前
Python决策树、随机森林、朴素贝叶斯、KNN(K-最近邻居)分类分析银行拉新活动挖掘潜在贷款客户附数据代码
python·决策树·随机森林
yannan201903131 小时前
【算法】(Python)动态规划
python·算法·动态规划
埃菲尔铁塔_CV算法1 小时前
人工智能图像算法:开启视觉新时代的钥匙
人工智能·算法
EasyCVR1 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
打羽毛球吗️1 小时前
机器学习中的两种主要思路:数据驱动与模型驱动
人工智能·机器学习
蒙娜丽宁1 小时前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev1 小时前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
好喜欢吃红柚子1 小时前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn