Numpy: Multiplying a matrix with a 3d tensor — Sug

2019-01-18 03:56发布

问题:

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!

回答1:

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


回答2:

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)