Skip to content Skip to sidebar Skip to footer

How To Form A Matrix From Submatrices?

Let's say that I have these 4 submatrices: print(A[0]) print(A[1]) print(A[2]) print(A[3]) [[ 0. 1. 2.] [ 6. 7. 8.] [ 12. 13. 14.]] [[ 3. 4. 5.] [ 9. 10. 11

Solution 1:

With A as the input array containing those sub-matrices, you could use some reshaping and permute dimensions with np.transpose, like so -

A.reshape(2,2,3,3).transpose(0,2,1,3).reshape(-1,6)

Explanation -

  • Cut the first axis into two parts : A.reshape(2,2,3,3).
  • Swap the second and third axes : .transpose(0,2,1,3).
  • Finally, reshape to have 6 columns : .reshape(-1,6).

Thus, the solution could be generalized like so -

m,n,r = A.shape
out = A.reshape(-1,2,n,r).transpose(0,2,1,3).reshape(-1,2*r)

Sample run

Let's re-create your A -

In [54]: A = np.arange(36).reshape(-1,3,2,3). transpose(0,2,1,3).reshape(4,3,3)

In [55]: A
Out[55]: 
array([[[ 0,  1,  2],
        [ 6,  7,  8],
        [12, 13, 14]],

       [[ 3,  4,  5],
        [ 9, 10, 11],
        [15, 16, 17]],

       [[18, 19, 20],
        [24, 25, 26],
        [30, 31, 32]],

       [[21, 22, 23],
        [27, 28, 29],
        [33, 34, 35]]])

Then, run our code -

In [56]: A.reshape(2,2,3,3).transpose(0,2,1,3).reshape(-1,6)
Out[56]: 
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35]])

Post a Comment for "How To Form A Matrix From Submatrices?"