# Assignment with advance indexing fails to modify tensor

Hi,

I have a tensor of shape `(7, 4, 1, 80, 2)` and I would like to modify some of its indices. I’ve tried to do this in two different indexing steps.

1. index relevant indices at dimension 1 (of size 4)
`x[torch.arange(x.size(0)).unsqueeze(1), idx]` where `idx` is of shape `(7,3)`, meaning I index `3` out of `4` indices.
2. index relevant indices at dimension 4 (of size 80) which turns my code into:
``````x[torch.arange(x.size(0)).unsqueeze(1), idx][[
torch.arange(x.size(0))[:, None, None, None],
torch.arange(x.size(1) - 1)[:, None, None],
torch.arange(x.size(2))[:, None],
inner_idx
]]
``````

where `inner_idx` is of shape `(7,3, 1, 60)`, meaning I index `60` out of `80` indices

finally I modify the tensor values:

``````x[torch.arange(x.size(0)).unsqueeze(1), idx][[
torch.arange(x.size(0))[:, None, None, None],
torch.arange(x.size(1) - 1)[:, None, None], # x.size(1) - 1 since 4 turned into 3
torch.arange(x.size(2))[:, None],
inner_idx
]]  = new_values
``````

where `new_values` is of shape `(7, 3, 1, 60, 2)`

However x is not modified.

Is there anyway to solve this issue?

Thanks

Edit:

Reading more on this issue, I think it might have to do with gradients.

I will elaborate that this issue still persists regardless of `x.requires_grad = True/False`. For `new_values`, `requires_grad` is set to `True`, since I need this for training the model.

You might need to remove the chained indexing and use a single indexing operation to manipulate `x`.

1 Like

Yes that seems to have worked. Thanks!