Question: I have a matrix `P` with shape `MxN` and a 3d tensor `T` with shape `KxNxR`. I want to multiply `P` with every `NxR` matrix in `T`, resulting in a `KxMxR` 3d tensor.

`P.dot(T).transpose(1,0,2)` gives the desired result. Is there a *nicer* solution (i.e. getting rid of `transpose`) to this problem? This must be quite a common operation, so I assume, others have found different approaches, e.g. using `tensordot` (which I tried but failed to get the desired result). Opinions/Views would be highly appreciated!

Answer: 
```
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)

```
You could also use Einstein summation notation:

```
P = numpy.random.randint(1,10,(5,3))
P.shape
T = numpy.random.randint(1,10,(2,3,4))
T.shape

numpy.einsum('ij,kjl->kil',P,T)

```

which should give you the same results as:

```
P.dot(T).transpose(1,0,2)

```