0

In Pytorch, for the code:

torch.arange(0, 3).view(-1, *[1]*3)

The result is:

tensor([[[[0]]],


    [[[1]]],


    [[[2]]]])


    torch.Size([3, 1, 1, 1])

Where [1] * 3 = [1, 1, 1], but I don`t understand the * before [1] * 3. What is the meaning of it? Thanks.

  • 1
    The second answer on the question Michael Szczesny posted directly addresses your question: https://stackoverflow.com/a/36926/2790047 – jodag Feb 15 '22 at 16:53

1 Answers1

2

While links provided in the comments describe parts of the solution, whole thing might be missing, hence, let’s disentangle this view method:

.view(-1,...)

Means “all the elements”, in your case it is 3 as you have [0, 1, 2] with length of 3.

Next:

[1] * 3

Is a Python trick to create new list with single element repeated multiple times.

It is the same as

[1, 1, 1]

Now unpacking with asterisk “unpacks” values as arguments to function, in this case:

.view(-1, [1, 1, 1])

Becomes:

.view(-1, 1, 1, 1)

And the whole thing is (according to first step):

.view(3, 1, 1, 1)

BTW. Please don't do that under most circumstances, it’s pretty hard to follow as one can see above.

Szymon Maszke
  • 22,747
  • 4
  • 43
  • 83