Reputation: 818
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!
Upvotes: 14
Views: 5807
Reputation: 140
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)
Upvotes: 2