Let `x`

and `emb`

be 2D matrices of size `(bsz, n)`

and `(n, m)`

respectively.

```
x = torch.FloatTensor([[0,1,2], [3,4,5]])
emb = torch.FloatTensor([[0,1,2,3], [4,5,6,7], [8,9,10,11]])
# x
# tensor([[ 0., 1., 2.],
# [ 3., 4., 5.]])
# emb
# tensor([[ 0., 1., 2., 3.],
# [ 4., 5., 6., 7.],
# [ 8., 9., 10., 11.]])
```

I want the result to be a 3D tensor of size `(bsz, n, m)`

where `out[j, i, :] = x[j, i] * emb[i, :]`

. I am using a loop for now as below but I thought there might be a better way?

```
out = torch.zeros(bsz, n, m)
for i in range(bsz):
out[i] = x[i].view(-1, 1) * emb
# out
# tensor([[[ 0., 0., 0., 0.],
# [ 4., 5., 6., 7.],
# [ 16., 18., 20., 22.]],
#
# [[ 0., 3., 6., 9.],
# [ 16., 20., 24., 28.],
# [ 40., 45., 50., 55.]]])â€‹
```