如何在pytorch的固定位置插入一个值

原文标题How to insert a value in a fixed positon of pytorch

我有一个 PyTorch 张量

x = [[1,2,3,4,5]]

现在我想在张量 x 的固定位置添加一个值,例如,我想在位置 3 中添加 11,那么 x 将是

x= [[1,2,3,11,4,5]]

如何在 Pytorch 中执行此操作?

原文链接:https://stackoverflow.com//questions/71669183/how-to-insert-a-value-in-a-fixed-positon-of-pytorch

回复

我来回复
  • kmario23的头像
    kmario23 评论

    PyTorch 不支持将数组沿非单维维度动态扩展到任意大小,例如您提到的那些,主要是因为内存是在张量构造期间预先分配的,并根据数据类型设置为固定大小。增长非单一维度大小的唯一方法是创建一个具有目标形状的新(空/零)张量,并在所需位置插入值,同时复制值。

    In [24]: z = torch.zeros(1, 6)
    In [27]: t
    Out[27]: tensor([[1, 2, 3, 4, 5]])
    
    In [30]: z[:, :3] = t[:, :3]
    In [33]: z[:, -2:] = t[:, -2:]
    In [36]: z[z == 0] = 11
    
    In [37]: z
    Out[37]: tensor([[ 1.,  2.,  3., 11.,  4.,  5.]])
    

    然而,如果你想沿着单维展开张量,那么使用tensor.expand(new_shape)很容易实现。在下面的示例中,我们将张量t沿第 0 维扩展为长度 3,这原本是一个单维。

    # make a copy for in-place modification since `expand()` returns a view
    In [64]: t_expd = t.expand(3, -1).clone()
    
    In [65]: t_expd
    Out[65]: 
    tensor([[1, 2, 3, 4, 5],
            [1, 2, 3, 4, 5],
            [1, 2, 3, 4, 5]])
    
    # modify 2nd and 3rd rows
    In [66]: t_expd[1:, ...] = 23
    
    In [67]: t_expd
    Out[67]: 
    tensor([[ 1,  2,  3,  4,  5],
            [23, 23, 23, 23, 23],
            [23, 23, 23, 23, 23]])
    
    2年前 0条评论