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

ops/2024/9/23 1:46:49/

在 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 拼接时,所有张量的列数需要相同。


http://www.ppmy.cn/ops/114519.html

相关文章

星火AI图片理解API文档

图片理解 API 文档 | 讯飞开放平台文档中心 接口说明 用户输入一张图片和问题,从而识别出图片中的对象、场景等信息回答用户的问题 部分开发语言demo如下,其他开发语言请参照文档进行开发,也欢迎热心的开发者到 讯飞开放平台社区 分享你们的…

mac python安装库的问题——以requests为例

在 macOS 上安装 Python 的 requests 库,可以通过以下步骤完成: 打开终端: 可以在“应用程序” > “实用工具”中找到“终端”,或者通过 Spotlight 搜索“终端”。 确保已安装 Python: 输入以下命令检查 Python 是…

达梦disql支持上翻历史命令-安装rlwrap

time:2024/09/18 Author:skatexg 一、背景 DM安装完成后使用disql命令行,无法使用上下键引用历史命令,会出现“[[A[[A”的现象。这样的操作包括使用退格Backspace键,上下键,左右键等。解决这个问题,可以使用rlwrap工…

Kalman算法、扩展卡尔曼滤波(EKF)和无迹卡尔曼滤波(UKF)的比较

目录 一、Kalman算法 Kalman算法优缺点: 二、扩展卡尔曼滤波(EKF) 原理: 扩展Kalman算法优缺点: 步骤简化: 优点简化: 缺点简化: 三、无迹卡尔曼滤波(UKF&#…

WinRAR技巧:如何高效制作RAR分卷压缩文件

RAR分卷压缩是一种将大文件分割成多个较小文件的技术,便于在存储空间有限或网络传输条件受限的情况下传输和存储。本文将详细介绍如何使用WinRAR压缩软件来制作RAR分卷压缩文件。 我们先将压缩包内的文件解压出来,然后查看一下,然后打开WinR…

蓝桥杯2024省C

P10898 [蓝桥杯 2024 省 C] 拼正方形 题目描述 小蓝正在玩拼图游戏,他有 7385137888721个 22的方块和 10470245 个 11 的方块,他需要从中挑出一些来拼出一个正方形,比如用 3 个 22 和 4 个 11 的方块可以拼出一个 44 的正方形,用…

2024“华为杯”中国研究生数学建模竞赛(A题)深度剖析_数学建模完整过程+详细思路+代码全解析

问题一详细解答过程 2. 简化疲劳损伤计算模型 2.1 累积损伤的Palmgren-Miner理论 根据Palmgren-Miner线性累积损伤理论,疲劳损伤是通过在一定的应力循环下累积的。对于给定应力幅值 S i S_i Si​,累积损伤值 D D D 是由经历的应力循环次数 n i n_i…

【Android Studio】使用雷电模拟器调试

文章目录 进入开发者模式使雷电模拟器adb连接PC 进入开发者模式 多次点击版本号 -开区USB调试 使雷电模拟器adb连接PC 写cmd脚本 雷电模拟器端口为5555 ,脚本内容如下: adb.exe connect 127.0.0.1:5555默认使用powershell的建议为: .\a…