Skip to content
Related Articles

Related Articles

numpy.stack() in Python

View Discussion
Improve Article
Save Article
  • Difficulty Level : Hard
  • Last Updated : 08 Aug, 2022
View Discussion
Improve Article
Save Article

NumPy is a famous Python library used for working with arrays. One of the important functions of this library is stack().

Important points:

  • stack() is used for joining multiple NumPy arrays. Unlike, concatenate(), it joins arrays along a new axis. It returns a NumPy array.
  • to join 2 arrays, they must have the same shape and dimensions. (e.g. both (2,3)–> 2 rows,3 columns)
  • stack() creates a new array which has 1 more dimension than the input arrays. If we stack 2 1-D arrays, the resultant array will have 2 dimensions.

Syntax:  numpy.stack(arrays, axis=0, out=None)

Parameters:

  • arrays: Sequence of input arrays (required)
  • axis: Along this axis, in the new array, input arrays are stacked. Possible values are 0 to (n-1) positive integer for n-dimensional output array. For example, in the case of a resultant 2-D array, there are 2 possible axis options :0 and 1. axis=0 means 1D input arrays will be stacked row-wise. axis=1 means 1D input arrays will be stacked column-wise. We shall see the example later in detail. -1 means last dimension. e.g. for 2D arrays axis 1 and -1 are same. (optional)
  • out: The destination to place the resultant array.

Example #1 : stacking two 1d arrays

Python




import numpy as np
 
# input array
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
 
# Stacking 2 1-d arrays
c = np.stack((a, b),axis=0)
print(c)

output – 

array([[1, 2, 3],
      [4, 5, 6]])

  Notice, output is a 2-D array. They are stacked row-wise. Now, let’s change the axis to 1.

Python




# stack 2 1-d arrays column-wise
np.stack((a,b),axis=1)

output – 

array([[1, 4],
      [2, 5],
      [3, 6]])

Here, stack() takes 2 1-D arrays and stacks them one after another as if it fills elements in new array column-wise.

Python




#stacking 2 arrays along -1 axis
np.stack((a,b),axis=-1)

 output –

array([[1, 4],
      [2, 5],
      [3, 6]])

-1 represents ‘last dimension-wise’. Here 2 axis are possible. 0 and 1. So, -1 is same as 1.

Example #2 : stacking two 2d arrays

Python3




# input arrays
x=np.array([[1,2,3],
            [4,5,6]])
 
y=np.array([[7,8,9],
            [10,11,12]])

1. stacking with axis=0

Python3




np.stack((x,y),axis=0)

output – 

array([[[ 1,  2,  3],
       [ 4,  5,  6]],

      [[ 7,  8,  9],
       [10, 11, 12]]])

Imagine as if they are stacked one after another and made a 3-D array.

2. stacking with axis=1

Python3




np.stack((x,y),axis=1)

Output – 3D array. 1st dimension has 1st rows. 2nd dimension has 2nd rows. [Row-wise stacking]

array([[[ 1,  2,  3],
       [ 7,  8,  9]],

      [[ 4,  5,  6],
       [10, 11, 12]]])

3. stacking with axis =2

Python3




np.stack((x,y),axis=2)

Output – 3D array. 1st dimension has 1st rows. 2nd dimension has 2nd rows. [Column-wise stacking]

array([[[ 1,  7],
       [ 2,  8],
       [ 3,  9]],

      [[ 4, 10],
       [ 5, 11],
       [ 6, 12]]])

Example #2 : stacking more than two 2d arrays

1. with axis=0 : Just stacking. 

Python3




x=np.array([[1,2,3],
            [4,5,6]])
y=np.array([[7,8,9],
            [10,11,12]])
z=np.array([[13,14,15],
            [16,17,18]])
 
np.stack((x,y,z),axis=0)

 output – 

array([[[ 1,  2,  3],
       [ 4,  5,  6]],

      [[ 7,  8,  9],
       [10, 11, 12]],

      [[13, 14, 15],
       [16, 17, 18]]])

2. with axis =1 (row-wise stacking)

Python3




np.stack((x,y,z),axis=1)

output – 

array([[[ 1,  2,  3],
       [ 7,  8,  9],
       [13, 14, 15]],

      [[ 4,  5,  6],
       [10, 11, 12],
       [16, 17, 18]]])

3. with axis =2 (column-wise stacking)

Python




np.stack((x,y,z),axis=2)

output-

array([[[ 1,  7, 13],
       [ 2,  8, 14],
       [ 3,  9, 15]],

      [[ 4, 10, 16],
       [ 5, 11, 17],
       [ 6, 12, 18]]])

Example #3 : stacking two 3d arrays

1. axis=0. Just stacking

Python3




#2 input 3d arrays
 
m=np.array([[[1,2,3],
            [4,5,6],
            [7,8,9]],
 
            [[10,11,12],
            [13,14,15],
            [16,17,18]]])
 
n=np.array([[[51,52,53],
            [54,55,56],
            [57,58,59]],
 
            [[110,111,112],
            [113,114,115],
            [116,117,118]]])
 
# stacking
np.stack((m,n),axis=0)

 output – 

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

       [[ 10,  11,  12],
        [ 13,  14,  15],
        [ 16,  17,  18]]],

      [[[ 51,  52,  53],
        [ 54,  55,  56],
        [ 57,  58,  59]],

       [[110, 111, 112],
        [113, 114, 115],
        [116, 117, 118]]]])

2. with axis=1 

Python3




np.stack((m,n),axis=1)

output – Imagine as if the resultant array takes 1st plane of each array for 1st dimension and so on.

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

       [[ 51,  52,  53],
        [ 54,  55,  56],
        [ 57,  58,  59]]],

      [[[ 10,  11,  12],
        [ 13,  14,  15],
        [ 16,  17,  18]],

       [[110, 111, 112],
        [113, 114, 115],
        [116, 117, 118]]]])

3. with axis = 2 

Python3




np.stack((m,n),axis=2)

output – 

array([[[[  1,   2,   3],
        [ 51,  52,  53]],

       [[  4,   5,   6],
        [ 54,  55,  56]],

       [[  7,   8,   9],
        [ 57,  58,  59]]],

      [[[ 10,  11,  12],
        [110, 111, 112]],

       [[ 13,  14,  15],
        [113, 114, 115]],

       [[ 16,  17,  18],
        [116, 117, 118]]]])

4. with axis = 3

Python3




np.stack((m,n),axis=3)

output – 

array([[[[  1,  51],
        [  2,  52],
        [  3,  53]],

       [[  4,  54],
        [  5,  55],
        [  6,  56]],

       [[  7,  57],
        [  8,  58],
        [  9,  59]]],

      [[[ 10, 110],
        [ 11, 111],
        [ 12, 112]],

       [[ 13, 113],
        [ 14, 114],
        [ 15, 115]],

       [[ 16, 116],
        [ 17, 117],
        [ 18, 118]]]])


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!