Добавьте список тензоров двух факелов

#python #pytorch

Вопрос:

Я хочу добавить два тензора PyTorch вместе, например, пусть

 a = tensor([[1., 1., 2.],
            [1., 1., 2.],
            [1., 1., 2.],
            [1., 1., 2.],
            [1., 1., 2.],
            [1., 1., 2.]])

b = tensor([[4., 5., 6., 7., 8., 9.],
            [4., 5., 6., 7., 8., 9.],
            [4., 5., 6., 7., 8., 9.],
            [4., 5., 6., 7., 8., 9.],
            [4., 5., 6., 7., 8., 9.],
            [4., 5., 6., 7., 8., 9.]])
 

И я хотел бы, чтобы результирующий тензор c был:

 c = tensor([[5., 6., 8., 8., 9., 11.],
            [5., 6., 8., 8., 9., 11.],
            [5., 6., 8., 8., 9., 11.],
            [5., 6., 8., 8., 9., 11.],
            [5., 6., 8., 8., 9., 11.],
            [5., 6., 8., 8., 9., 11.]])
 

Примечание: b.shape[1] всегда кратно a.shape[1] .

есть ли лучший способ, чем решение, приведенное ниже?

 fin =  torch.Tensor()
for i in range(int(b.shape[1]/a.shape[1])):
    target = b[:,batch*i:batch*(i 1)]
    temp = torch.add(target, a)
    fin = torch.cat([fin, temp], dim =1)
c = fin
 

Ответ №1:

Вы можете повторить столбцы a , чтобы они соответствовали форме b с torch.Tensor.repeat , а затем добавить полученный тензор в b :

 >>> b   a.repeat(1, b.size(1)//a.size(1))
tensor([[ 5.,  6.,  8.,  8.,  9., 11.],
        [ 5.,  6.,  8.,  8.,  9., 11.],
        [ 5.,  6.,  8.,  8.,  9., 11.],
        [ 5.,  6.,  8.,  8.,  9., 11.],
        [ 5.,  6.,  8.,  8.,  9., 11.],
        [ 5.,  6.,  8.,  8.,  9., 11.]])
 

Комментарии:

1. ух ты. какое простое решение