如何编织 pytorch 张量

How to weave a pytorch tensor

提问人:Reza Aalaei 提问时间:11/13/2021 更新时间:11/13/2021 访问量:88

问:

我有两个矩阵


A = torch.tensor([[1,1,1,1,1],
                  [1,1,1,1,1],
                  [1,1,1,1,1]])

B = torch.tensor([[2,2,2,2,2],
                  [2,2,2,2,2],
                  [2,2,2,2,2]]

我想将两个矩阵连接起来,使 matric C 变成:

C = torch.tensor([[1,2,1,2,1,2,1,2],
                  [1,2,1,2,1,2,1,2],
                  [1,2,1,2,1,2,1,2]])

我认为如果 A 转换为:

 torch.tensor([[1,0,1,0,1,0,1,0],
               [1,0,1,0,1,0,1,0],
               [1,0,1,0,1,0,1,0]])

B 转换为:

torch.tensor([[0,2,0,2,0,2,0,2],
              [0,2,0,2,0,2,0,2],
              [0,2,0,2,0,2,0,2]])

然后将它们相加。有什么办法可以做到这一点吗?提前致谢

numpy pytorch 科学数据 操作 张量

评论


答:

0赞 Ivan 11/13/2021 #1

您可以通过转置、堆叠和转置的组合来实现这一点:

  1. 堆栈转置张量:

    >>> torch.stack((A.T, B.T), 1)
    tensor([[[1, 1, 1],
             [2, 2, 2]],
    
            [[1, 1, 1],
             [2, 2, 2]],
    
            [[1, 1, 1],
             [2, 2, 2]],
    
            [[1, 1, 1],
             [2, 2, 2]],
    
            [[1, 1, 1],
             [2, 2, 2]]])
    
  2. 再次转置:

    >>> torch.stack((A.T, B.T), 1).transpose(1, 2)
    tensor([[[1, 2],
             [1, 2],
             [1, 2]],
    
            [[1, 2],
             [1, 2],
             [1, 2]],
    
            [[1, 2],
             [1, 2],
             [1, 2]],
    
            [[1, 2],
             [1, 2],
             [1, 2]],
    
            [[1, 2],
             [1, 2],
             [1, 2]]])
    
  3. 重塑为最终形式:

    >>> torch.stack((A.T, B.T), 1).transpose(1, 2).reshape(A.size(0), A.size(1)*2)
    tensor([[1, 2, 1, 2, 1, 2, 1, 2, 1, 2],
            [1, 2, 1, 2, 1, 2, 1, 2, 1, 2],
            [1, 2, 1, 2, 1, 2, 1, 2, 1, 2]])