Reputation: 473
I have a (5,5,5,5) matrix created using numpy that looks like:
[[[[0.64 0.16 0. 0. 0. ]
[0. 0.64 0.16 0. 0. ]
[0. 0. 0.64 0.16 0. ]
[0. 0. 0. 0.64 0.16]
[0. 0. 0. 0. 0.8 ]]
[[0.16 0.04 0. 0. 0. ]
[0. 0.16 0.04 0. 0. ]
[0. 0. 0.16 0.04 0. ]
[0. 0. 0. 0.16 0.04]
[0. 0. 0. 0. 0.2 ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]]
[[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0.64 0.16 0. 0. 0. ]
[0. 0.64 0.16 0. 0. ]
[0. 0. 0.64 0.16 0. ]
[0. 0. 0. 0.64 0.16]
[0. 0. 0. 0. 0.8 ]]
[[0.16 0.04 0. 0. 0. ]
[0. 0.16 0.04 0. 0. ]
[0. 0. 0.16 0.04 0. ]
[0. 0. 0. 0.16 0.04]
[0. 0. 0. 0. 0.2 ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]]
[[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0.64 0.16 0. 0. 0. ]
[0. 0.64 0.16 0. 0. ]
[0. 0. 0.64 0.16 0. ]
[0. 0. 0. 0.64 0.16]
[0. 0. 0. 0. 0.8 ]]
[[0.16 0.04 0. 0. 0. ]
[0. 0.16 0.04 0. 0. ]
[0. 0. 0.16 0.04 0. ]
[0. 0. 0. 0.16 0.04]
[0. 0. 0. 0. 0.2 ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]]
[[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0.64 0.16 0. 0. 0. ]
[0. 0.64 0.16 0. 0. ]
[0. 0. 0.64 0.16 0. ]
[0. 0. 0. 0.64 0.16]
[0. 0. 0. 0. 0.8 ]]
[[0.16 0.04 0. 0. 0. ]
[0. 0.16 0.04 0. 0. ]
[0. 0. 0.16 0.04 0. ]
[0. 0. 0. 0.16 0.04]
[0. 0. 0. 0. 0.2 ]]]
[[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. ]]
[[0.8 0.2 0. 0. 0. ]
[0. 0.8 0.2 0. 0. ]
[0. 0. 0.8 0.2 0. ]
[0. 0. 0. 0.8 0.2 ]
[0. 0. 0. 0. 1. ]]]]
How do I efficiently convert it to a (25,25) matrix whose first row is the concatenation of the first rows of the first five (5,5) blocks, and the second is the concatenation of the second rows of the first (5,5) blocks, and so on? For example, given my input matrix, the first row of the output matrix should be:
[0.64 0.16 0. 0. 0. 0.16 0.04 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. ]
while the sixth row should be the combination of the first rows of the 6th to 10th 5-by-5 blocks, which is:
[0. 0. 0. 0. 0. 0.64 0.16 0. 0. 0. 0.16
0.04 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. ]
I tried numpy.reshape(input, (25,25)) but didn't get the result I desire. Any help is appreciated!
Upvotes: 1
Views: 1499
Reputation: 880937
Use swapaxes
(or transpose
) to rearrange the order of the axes before reshaping:
In [48]: y = x.swapaxes(1,2).reshape(25,25)
In [49]: y[0]
Out[49]:
array([0.64, 0.16, 0. , 0. , 0. , 0.16, 0.04, 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ])
In [50]: y[5]
Out[50]:
array([0. , 0. , 0. , 0. , 0. , 0.64, 0.16, 0. , 0. , 0. , 0.16,
0.04, 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ])
Upvotes: 2