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!
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.
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 .
scipy.tensordot(P, T, axes=[1,1]).swapaxes(0,1)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With