I have a problem where I need to index a Variable that requires gradient using a ByteTensor. However, this seems to be an in-place operation, and so PyTorch throws an error:

```
RuntimeError: a leaf Variable that requires grad has been used in an in-place operation.
```

The following piece of code reproduces the error in a very simple way:

```
import torch
from torch.autograd import Variable
x = torch.LongTensor([0,1,0,1,1,0])
y = Variable(torch.zeros(x.size()), requires_grad=True)
y[x == 0] = Variable(torch.Tensor([-5]))
print('y',y)
```

Clearly, the intended output would be:

```
y Variable containing:
-5
0
-5
0
0
-5
[torch.FloatTensor of size (6,)]
```

As a workaround, we can use an explicit for-loop over the elements of x:

```
import torch
from torch.autograd import Variable
x = torch.LongTensor([0,1,0,1,1,0])
y = Variable(torch.zeros(x.size()), requires_grad=True)
for i in range(x.size(0)):
if x[i] == 0:
y[i] = Variable(torch.Tensor([-5]))
print('y',y)
```

Here, `y[i] = Variable(torch.Tensor([-5]))`

is not an in-place operation (donâ€™t know why) and therefore it works. However, this for-loop is very inefficient, taking a lot of time if `x`

has a large dimension.

Are there any alternatives? Thanks in advance.