Вы также можете использовать обозначение Эйнштейна для суммирования:
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)
, который должен дать вам те же результаты, что и:
P.dot(T).transpose(1,0,2)