Consider the following:I start with a $2\times 2$ matrix $W_{ij}$.  I then take this $W$ matrix and make a new tensor, $T$, by doing the following:$$T_{ijkl}=\sum_{a}W_{ai}W_{aj}W_{ak}W_{al}$$which in my code I am using the (slick) ``einsum'' tool in numpy:tt = np.einsum('ai, aj, ak, al', w, w, w, w)with import numpy as np for np.  Next I preform the following:$$M_{XX'y''y'}=\sum_{y}T_{xx'yy'}T_{x''x'''y''y}$$with $X=x\otimes x''$ and $X'=x'\otimes x'''$.  Now when I do a naive reshape in numpy mtensor = np.einsum('ikma, jlan', tt, tt).reshape(4, 4, 2, 2)This simply unfolds the array and then recollects in order.  However, I would like to have the power to combine certain indices (states) into a single index (like an outer product but for indices).  That is, take my two, $2$ state indices, and combine them into a $4$ state index that is all the possible combinations of their states.  If someone knows a slick way to do this in numpy I would greatly appreciate some documentation or an answer.  Thanks in advance.  
Reshape and Index (State) Products in Numpy
python;numpy