Home > Back-end >  Stack every two elements of the third dimension in a numpy 3d array
Stack every two elements of the third dimension in a numpy 3d array

Time:12-13

I have a numpy array of shape (294, 62, 350). Along the third dimension (the 350), I need to combine every two columns into one longer one which would result in an array of shape (294, 124, 175). For example if I have this array:

a_3d_array = np.array([[[1, 2, 3, 6, 1, 2], [3, 4, 3, 6, 1, 4]],
                      [[5, 2, 2, 1, 4, 2], [2, 9, 4, 3, 2, 7]]])

The expected output would be:

expected_output = np.array([[[5, 2, 4], [2, 4, 2], [ 2, 1, 2], [9, 3, 7]],
                          [[1, 3, 1], [3, 3, 1], [2, 6, 2], [4, 6, 4]]])

Sorry as I'm new to python and I don't have a clue how to approach this and thus I don't have a "my own attempt" to include here.

CodePudding user response:

a_3d_array = np.array([[[1, 2, 3, 6, 1, 2], [3, 4, 3, 6, 1, 4]],
                     [[5, 2, 2, 1, 4, 2], [2, 9, 4, 3, 2, 7]]])
output = np.hstack([a_3d_array[:, :, ::2], a_3d_array[:, :, 1::2]])

CodePudding user response:

You can reshape and reverse the first dimension:

a_3d_array.reshape((2,4,3), order='F')[::-1]

If you don't know the shape:

x,y,z = a_3d_array.shape
a_3d_array.reshape((x,y*2,-1), order='F')[::-1]

output:

array([[[5, 2, 4],
        [2, 4, 2],
        [2, 1, 2],
        [9, 3, 7]],

       [[1, 3, 1],
        [3, 3, 1],
        [2, 6, 2],
        [4, 6, 4]]])
  • Related