Suppose I have a tensor **A** of shape (B, S, D) and an indexing tensor **B** of shape (B, S). I want to use the indexing tensor to select D dimensional vectors from tensor **A** resulting in an output tensor of shape (B, S, D).

For example suppose

```
A = [[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]]
```

a (2,2,3) matrix and

```
B = [[0, 0],
[1, 0]]
```

Then the result would be

```
[[[ 1, 2, 3],
[ 1, 2, 3]],
[[10, 11, 12],
[ 7, 8, 9]]]
```

This can be accomplished using a for loop like so:

```
def function(A, indices):
C = torch.zeros_like(A)
for i in range(A.size(0)):
C[i] = A[i,indices[i]]
return C
```

Is there a way to do this faster and without a for loop?