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!