pytorch每日一学33(torch.hstack())从水平方向(列方向)叠加向量

第33个方法

torch.hstack(tensors, *, out=None) → Tensor

此方法应该和前面的torch.dstack()对照起来看,前面的是在深度方向上进行叠加,而这个方法是在水平方向上进行叠加,首先看一下使用参数。

  • tensors:要拼接的tensor序列。
  • out:输出tensor。

此方法对一维的tensor沿着第一维进行拼接,而对其它维度的tensor沿着第二维进行拼接。

首先来看一个例子:

>>> a = torch.tensor([1, 2, 3])
>>> b = torch.tensor([4, 5, 6])
>>> torch.hstack((a,b))
tensor([1, 2, 3, 4, 5, 6])
>>> a = torch.tensor([[1],[2],[3]])
>>> b = torch.tensor([[4],[5],[6]])
>>> torch.hstack((a,b))
tensor([[1, 4],
        [2, 5],
        [3, 6]])

可以看到,对于一维的tensor,确实是在水平方向直接进行了拼接。而在二维的tensor上是在第二个维度进行了拼接,接下里我们看在三维上的情况。
在这里插入图片描述

  • 可以看到确实是对第二维进行了拼接,例如c中的
    [[0.9646, 0.6254, 0.5185, 0.3193],
    [0.3248, 0.8872, 0.1793, 0.6818],
    [0.6927, 0.9157, 0.2554, 0.0317],
    [0.3084, 0.6268, 0.0684, 0.9537],
    [0.1824, 0.1292, 0.9219, 0.2265],
    [0.0826, 0.5043, 0.2404, 0.3039]]
    直接等于a中的第二维中的第一个元素:
    [[0.9646, 0.6254, 0.5185, 0.3193],
    [0.3248, 0.8872, 0.1793, 0.6818],
    [0.6927, 0.9157, 0.2554, 0.0317]]
    与b中的第二维中的第一个元素:
    [[0.3084, 0.6268, 0.0684, 0.9537],
    [0.1824, 0.1292, 0.9219, 0.2265],
    [0.0826, 0.5043, 0.2404, 0.3039]]
    直接进行拼接,以此类推。

  • 所以此方法要求被拼接的tensors必须在第二个维度的长度相等,其余可以并且,并且在第二个维度上结果tensor的长度等于拼接tensors长度之和。

而在torch.dstack()中,这个是在第三维进行的。

### PyTorch `torch.stack` 参数详解 #### 参数说明 `torch.stack` 是用于沿给定维度连接相同形状的张量序的方法。该函数的主要参数如下: - **tensors (Sequence[Tensor])**: 这是个张量表,所有的输入张量必须具有相同的形状[^1]。 - **dim (int)**: 表示新维度的位置索引,在这个位置上将会把传入的张量按照顺序堆叠起来,默认值为0。这意味着如果设置其他数值,则会在指定的新轴处插入这些张量[^4]。 - **out (Tensor, optional)**: 可选参数,指定了输出张量的目标存储位置;如果不提供此参数,则会创建个新的张量来保存结果。 #### 使用方法与注意事项 当调用 `torch.stack()` 方法时,需要注意的是所有待处理的张量都应当具备致的数据结构尺寸,即它们应该拥有相等数量的维度以及对应维度上的长度也需匹配。此外,通过调整 `dim` 参数可以控制新增加的那个维度位于何处,这对于构建多维数组非常有用[^2]。 #### 示例代码展示 下面给出段简单的 Python 代码片段用来演示如何利用 `torch.stack` 来操作两个三维随机数向量并将其沿着最后个维度进行拼接: ```python import torch from torch import nn # 定义两个大小完全样的3D Tensor a = torch.randn((1, 3, 5)) b = torch.randn((1, 3, 5)) # 将这两个tensor按最后(-1)方向叠加起形成新的四维tensor frustum = torch.stack((a, b), -1) print(f"Shape of stacked tensor: {frustum.shape}") ``` 这段程序首先导入必要的库文件,接着定义了两个形状均为 `(1, 3, 5)` 的三阶张量 `a` 和 `b` 。之后运用 `torch.stack` 函数将二者依据 `-1` 维度组合成更高阶的新张量 `frustum` ,最终打印出其具体形态以验证操作成功与否[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值