I have a tensor t that I would like to transform. Therefore I made up a for loop that yields the desired result:

```
t = torch.tensor([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [10, 11, 12]])
N, d = t.shape
new = torch.zeros((N, N, 2*d))
for i in range(N):
for j in range(N):
new[i, j, :d] = t[i]
new[i, j, d:] = t[j]
new
>>>
tensor([[[ 1., 2., 3., 1., 2., 3.],
[ 1., 2., 3., 4., 5., 6.],
[ 1., 2., 3., 7., 8., 9.],
[ 1., 2., 3., 10., 11., 12.]],
[[ 4., 5., 6., 1., 2., 3.],
[ 4., 5., 6., 4., 5., 6.],
[ 4., 5., 6., 7., 8., 9.],
[ 4., 5., 6., 10., 11., 12.]],
[[ 7., 8., 9., 1., 2., 3.],
[ 7., 8., 9., 4., 5., 6.],
[ 7., 8., 9., 7., 8., 9.],
[ 7., 8., 9., 10., 11., 12.]],
[[10., 11., 12., 1., 2., 3.],
[10., 11., 12., 4., 5., 6.],
[10., 11., 12., 7., 8., 9.],
[10., 11., 12., 10., 11., 12.]]])
```

Do the for loops cause any errors with the gradient calculations? Is there any other way that concatenates the tensors in the same way without any for loops?