Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Numpy: Multiplying a matrix with a 3d tensor -- Suggestion

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!

like image 568
osdf Avatar asked Dec 20 '10 15:12

osdf


People also ask

How do you multiply 3D matrices?

A 3D matrix is nothing but a collection (or a stack) of many 2D matrices, just like how a 2D matrix is a collection/stack of many 1D vectors. So, matrix multiplication of 3D matrices involves multiple multiplications of 2D matrices, which eventually boils down to a dot product between their row/column vectors.

Is dot faster than Matmul?

I haven't messed around much with the matrix sizes, but I have found that this is happening when using an out= parameter and the output array is uninitialised and hence not yet faulted in. When it has been pre-faulted, the performance difference reverses, and matmul is much faster than dot .


1 Answers

scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
like image 105
Steve Tjoa Avatar answered Oct 04 '22 22:10

Steve Tjoa