pytorch张量维度操作(拼接、维度扩展、压缩、转置、重复……)

本文详细介绍了PyTorch中处理张量的一些核心操作,包括拼接张量(torch.cat() 和 torch.stack())、扩大张量(torch.Tensor.expand() 和 torch.unsqueeze())、压缩张量(torch.squeeze())、重复张量(torch.Tensor.repeat() 和 torch.Tensor.unfold())、缩小张量(torch.Tensor.narrow())、张量变形(torch.Tensor.view())以及重设张量尺寸(torch.Tensor.resize_() 和 torch.reshape())和置换张量维度(torch.Tensor.permute())。通过实例解析了各种操作的使用方法和应用场景。
摘要由CSDN通过智能技术生成

张量的操作确实有技巧,pytorch中提供了一些相关的操作,在编程的时候很有用。涉及的方法见下面的目录:

一、拼接张量

1、torch.cat()

torch.cat(tensors, dim=0, out=None) → Tensor
在指定的维度dim上对序列 seq 进行连接操作,注意:张量可以有多个,不一定只是两个。

参数:

tensors (sequence of Tensors) - 相同类型的张量的任何python序列。所提供的非空张量必须具有相同的形状,除了cat尺寸。
dim (int, optional) - 沿着此维度连接张量
out (Tensor, optional) - 输出参数

例子:

>>> x = torch.Tensor([[1, 2, 3],[4, 5, 6]])
>>> x
tensor([[1., 2., 3.],
        [4., 5., 6.]])
>>> x.shape  # 打印原始形状
torch.Size([2, 3])
>>> y = torch.cat((x, x, x), 0)  # 在0维进行拼接
tensor([[1., 2., 3.],
        [4., 5., 6.],
        [1., 2., 3.],
        [4., 5., 6.],
        [1., 2., 3.],
        [4., 5., 6.]])
>>> y.shape  # 打印形状,发现0维形状由 2-->6
torch.Size([6, 3])
>>> z = torch.cat((x, x, x), 1)   # 在1维进行拼接
tensor([[1., 2., 3., 1., 2., 3., 1., 2., 3.],
        [4., 5., 6., 4., 5., 6., 4., 5., 6.]])
>>> z.shape  # 打印形状,发现1维形状由 3-->9
torch.Size([2, 9])

2、torch.stack()

torch.stack(tensors, dim=0, out=None) → Tensor
沿着一个新的维数串联张量序列,所有的张量必须是相同的大小。这个和cat()的不同之处在于新增加了一个维度,新增的维度的位置就是dim。

参数:

tensors (sequence of Tensors) - 连接的张量序列
dim (int, optional) - 维插入。必须在0和连接张量的维数之间(包括)
out (Tensor, optional) - 输出参数

例子:

>>> a = torch.IntTensor([[1,2,3],[11,22,33]])
>>>> a
tensor([[ 1,  2,  3],
        [11, 22, 33]], dtype=torch.int32)
>>> a.shape
torch.Size([2, 3])
>>> b= torch.IntTensor([[4,5,6],[44,55,66]])
>>> b
tensor([[ 4,  5,  6],
        [44, 55, 66]], dtype=torch.int32)
>>> b.shape
torch.Size([2, 3])
>>> c=torch.stack([a,b],0)
>>> c
tensor([[[ 1,  2,  3],
         [11, 22, 33]],

        [[ 4,  5,  6],
         [44, 55, 66]]], dtype=torch.int32)
>>> c.shape  # 在第0维将这两个张量进行拼接,而原始的0维度向后移动
torch.Size([2, 2,<
  • 28
    点赞
  • 128
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
PyTorch中,可以使用torch.unsqueeze()函数来增加张量维度。例如,如果我们有一个张量a的形状为\[3, 5, 7\],我们想要在首部增加一个维度,变成\[1, 3, 5, 7\],可以使用torch.unsqueeze(a, 0)来实现。这将在第0维度上增加一个维度。结果的形状将变为\[1, 3, 5, 7\]。\[1\] 另外,还可以使用torch.reshape()函数来改变张量的形状。例如,如果我们有一个形状为\[2, 3\]的张量a,我们可以使用torch.reshape(a, (1, 2, 3))将其形状改变为\[1, 2, 3\]。这将在不改变张量元素顺序的情况下改变张量的形状。\[3\] 总结起来,要在PyTorch中增加维度,可以使用torch.unsqueeze()函数或torch.reshape()函数。 #### 引用[.reference_title] - *1* [pytorch使用None索引进行维度扩展](https://blog.csdn.net/m0_47256162/article/details/127845741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [pytorch张量维度操作拼接维度扩展压缩转置重复)](https://blog.csdn.net/Cretheego/article/details/128729649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值