Access tensor value through index value stored in another tensor

For below code, How would I access the value of “x” for the index mentioned in “y”?
Output should be [[1,9,17],[4,12,20]].

x shape is "torch.Size([3,1,8]) and y shape is "torch.Size([2, 2]).

import torch
x= torch.tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.]],

        [[ 8.,  9., 10., 11., 12., 13., 14., 15.]],

        [[16., 17., 18., 19., 20., 21., 22., 23.]]])


y=torch.tensor([[0,1],[0,4]])

Hi Cbd!

With a little fiddling around to get the indices in the right places, you
can use indexing;

>>> import torch
>>> torch.__version__
'1.9.0'
>>> x = torch.tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.]],
...         [[ 8.,  9., 10., 11., 12., 13., 14., 15.]],
...         [[16., 17., 18., 19., 20., 21., 22., 23.]]])
>>> y = torch.tensor([[0,1], [0,4]])
>>> x[:, y[:, 0], y[:, 1]].T
tensor([[ 1.,  9., 17.],
        [ 4., 12., 20.]])

Best.

K. Frank

I just want the answer just passing the variable y as indexing like “torch.function(x,y)” because in real there are so many values in tensor “y” for indexing in tensor “x”. Is it possible by using some pytorch function or trick.

| KFrank K. Frank
October 7 |

  • | - |

Hi Cbd!

cbd:

Output should be [[1,9,17],[4,12,20]].

With a little fiddling around to get the indices in the right places, you
can use indexing;

>>> import torch
>>> torch.__version__
'1.9.0'
>>> x = torch.tensor([[[ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.]],
...         [[ 8.,  9., 10., 11., 12., 13., 14., 15.]],
...         [[16., 17., 18., 19., 20., 21., 22., 23.]]])
>>> y = torch.tensor([[0,1], [0,4]])
>>> x[:, y[:, 0], y[:, 1]].T
tensor([[ 1.,  9., 17.],
        [ 4., 12., 20.]])

Best.

K. Frank