火炬 - 像numpy重复一样重复张量

mat*_*dns 4 torch

我试图以两种方式重复火炬的张量.例如,{1,2,3,4}两种方式重复张量3次以产生;

{1,2,3,4,1,2,3,4,1,2,3,4}
{1,1,1,2,2,2,3,3,3,4,4,4}
Run Code Online (Sandbox Code Playgroud)

有一个内置的火炬:repeatTensor函数,它将生成两个中的第一个(如numpy.tile()),但我找不到后者(如numpy.repeat()).我确信我可以在第一次调用sort来给第二个,但我认为对于更大的数组,这可能在计算上是昂贵的?

谢谢.

小智 13

尝试 torch.repeat_interleave() 方法:https ://pytorch.org/docs/stable/torch.html#torch.repeat_interleave

>>> x = torch.tensor([1, 2, 3])
>>> x.repeat_interleave(2)
tensor([1, 1, 2, 2, 3, 3])
Run Code Online (Sandbox Code Playgroud)


mar*_*xor 8

引用https://discuss.pytorch.org/t/how-to-tile-a-tensor/13853 -

z = torch.FloatTensor([[1,2,3],[4,5,6],[7,8,9]])
1 2 3
4 5 6
7 8 9
z.transpose(0,1).repeat(1,3).view(-1, 3).transpose(0,1)
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
7 7 7 8 8 8 9 9 9
Run Code Online (Sandbox Code Playgroud)

这将使您直观地了解它是如何工作的。


abh*_*kdz 5

a = torch.Tensor{1,2,3,4}
Run Code Online (Sandbox Code Playgroud)

为了让{1,2,3,4,1,2,3,4,1,2,3,4}我们在第一维中重复三次张量:

a:repeatTensor(3)
Run Code Online (Sandbox Code Playgroud)

为了让{1,1,1,2,2,2,3,3,3,4,4,4}我们在张量中添加一个维度并在第二维中重复三次以获得4 x 3张量,我们可以将其展平.

b = a:reshape(4,1):repeatTensor(1,3)
b:view(b:nElement())
Run Code Online (Sandbox Code Playgroud)