Identity element for stack operator `torch.stack([emtpty,x]) = x` (empty tensor exists?)

I want to stack tensors as I collect them in a loop and start with an empty tensor. Usually, when collecting elements in python we start with an empty list and then append. But when I try to stack with an “empty tensor” (with no dimensions) I get an error. Check the error and code:

import torch

empty = torch.tensor([])
x = torch.randn(3, 5, 7)
print(torch.stack([empty, x], dim=0).size())

error

import torch
empty = torch.tensor([])
x = torch.randn(3, 5, 7)
print(torch.stack([empty, x], dim=0).size())
Traceback (most recent call last):
  File "/Users/brando/anaconda3/envs/automl-meta-learning/lib/python3.8/site-packages/IPython/core/interactiveshell.py", line 3343, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-9-59f445556977>", line 5, in <module>
    print(torch.stack([empty, x], dim=0).size())
RuntimeError: stack expects each tensor to be equal size, but got [0] at entry 0 and [3, 5, 7] at entry 1

how do we do torch.stack such that: torch.stack([emtpty,x]) = x? where x is a torch tensor.


Update

hmmm perhaps what I need is torch.cat actually

import torch

empty = torch.tensor([])
x = torch.randn(3, 5, 7)

print(torch.cat([empty, x], dim=0).size())

since this adds new values at the front of the “list” but I guess I don’t really need to distinguish each append in my special case…probably still useful to have an identity for stack though.

# https://discuss.pytorch.org/t/identity-element-for-stack-operator-torch-stack-emtpty-x-x-empty-tensor-exists/111459
import torch
empty = torch.tensor([])
x = torch.randn(3, 5, 7)
print(torch.cat([empty, x], dim=0).size())
# print(torch.stack([empty, x], dim=0).size())
torch.Size([3, 5, 7])
1 Like