It's easier to understand what np.vstack, np.hstack and np.dstack* do by looking at the .shape attribute of the output array.

Using your two example arrays:

print(a.shape, b.shape)
# (3, 2) (3, 2)
  • np.vstack concatenates along the first dimension...

    print(np.vstack((a, b)).shape)
    # (6, 2)
    
  • np.hstack concatenates along the second dimension...

    print(np.hstack((a, b)).shape)
    # (3, 4)
    
  • and np.dstack concatenates along the third dimension.

    print(np.dstack((a, b)).shape)
    # (3, 2, 2)
    

Since a and b are both two dimensional, np.dstack expands them by inserting a third dimension of size 1. This is equivalent to indexing them in the third dimension with np.newaxis (or alternatively, None) like this:

print(a[:, :, np.newaxis].shape)
# (3, 2, 1)

If c = np.dstack((a, b)), then c[:, :, 0] == a and c[:, :, 1] == b.

You could do the same operation more explicitly using np.concatenate like this:

print(np.concatenate((a[..., None], b[..., None]), axis=2).shape)
# (3, 2, 2)

* Importing the entire contents of a module into your global namespace using import * is considered bad practice for several reasons. The idiomatic way is to import numpy as np.

Answer from ali_m on Stack Overflow
🌐
w3resource
w3resource.com › numpy › manipulation › dstack.php
NumPy: numpy.dstack() function - w3resource
NumPy Array manipulation: numpy.dstack() function, example - The numpy.dstack() is used to stack arrays in sequence depth wise (along third axis).
Top answer
1 of 4
91

It's easier to understand what np.vstack, np.hstack and np.dstack* do by looking at the .shape attribute of the output array.

Using your two example arrays:

print(a.shape, b.shape)
# (3, 2) (3, 2)
  • np.vstack concatenates along the first dimension...

    print(np.vstack((a, b)).shape)
    # (6, 2)
    
  • np.hstack concatenates along the second dimension...

    print(np.hstack((a, b)).shape)
    # (3, 4)
    
  • and np.dstack concatenates along the third dimension.

    print(np.dstack((a, b)).shape)
    # (3, 2, 2)
    

Since a and b are both two dimensional, np.dstack expands them by inserting a third dimension of size 1. This is equivalent to indexing them in the third dimension with np.newaxis (or alternatively, None) like this:

print(a[:, :, np.newaxis].shape)
# (3, 2, 1)

If c = np.dstack((a, b)), then c[:, :, 0] == a and c[:, :, 1] == b.

You could do the same operation more explicitly using np.concatenate like this:

print(np.concatenate((a[..., None], b[..., None]), axis=2).shape)
# (3, 2, 2)

* Importing the entire contents of a module into your global namespace using import * is considered bad practice for several reasons. The idiomatic way is to import numpy as np.

2 of 4
6

Let x == dstack([a, b]). Then x[:, :, 0] is identical to a, and x[:, :, 1] is identical to b. In general, when dstacking 2D arrays, dstack produces an output such that output[:, :, n] is identical to the nth input array.

If we stack 3D arrays rather than 2D:

x = numpy.zeros([2, 2, 3])
y = numpy.ones([2, 2, 4])
z = numpy.dstack([x, y])

then z[:, :, :3] would be identical to x, and z[:, :, 3:7] would be identical to y.

As you can see, we have to take slices along the third axis to recover the inputs to dstack. That's why dstack behaves the way it does.

🌐
Educative
educative.io › answers › what-is-the-numpydstack-function-in-numpy
What is the numpy.dstack() function in NumPy?
The dstack() function in NumPy is used to stack or arrange the given arrays in a sequence depth wise (that is, along the third axis), thereby creating an array of at least 3-D.
🌐
NumPy
numpy.org › doc › stable › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v2.5 Manual
Stack arrays in sequence depth wise (along third axis) · This is equivalent to concatenation along the third axis after 2-D arrays of shape (M,N) have been reshaped to (M,N,1) and 1-D arrays of shape (N,) have been reshaped to (1,N,1). Rebuilds arrays divided by dsplit
🌐
Medium
medium.com › @andiksyldnata › understanding-numpy-dstack-in-python-eb40e4467c09
Understanding NumPy dstack in Python | by 99spaceidea | Medium
June 21, 2023 - The NumPy dstack() function is used to stack arrays in sequence depth wise (along the third axis). This is equivalent to concatenation…
🌐
GeeksforGeeks
geeksforgeeks.org › python › python-numpy-dstack-method
Numpy dstack() method-Python - GeeksforGeeks
June 12, 2025 - numpy.dstack() stacks arrays depth-wise along the third axis (axis=2). For 1D arrays, it promotes them to (1, N, 1) before stacking. For 2D arrays, it stacks them along axis=2 to form a 3D array.
🌐
Vultr Docs
docs.vultr.com › python › third party › numpy › dstack()
Python Numpy dstack() - Stack Arrays Depthwise
November 18, 2024 - The numpy.dstack() function is designed for stacking arrays depth-wise along the third axis. This is particularly useful when working with multidimensional arrays or when needing to combine images (such as RGB channels) into a single array.
🌐
NumPy
numpy.org › doc › 2.3 › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v2.3 Manual
Stack arrays in sequence depth wise (along third axis) · This is equivalent to concatenation along the third axis after 2-D arrays of shape (M,N) have been reshaped to (M,N,1) and 1-D arrays of shape (N,) have been reshaped to (1,N,1). Rebuilds arrays divided by dsplit
Find elsewhere
🌐
Towards Data Science
towardsdatascience.com › home › data science › np.stack() - how to stack two arrays in numpy and python
np.stack() - How To Stack two Arrays in Numpy And Python | Towards Data Science
January 10, 2023 - The np concatenate function takes elements of all input arrays and returns them as a single 1D array. The numpy dstack function allows you to combine arrays index by index and store the results like a stack.
🌐
SciPy
docs.scipy.org › doc › numpy-1.12.0 › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v1.12 Manual
January 16, 2017 - numpy.dstack(tup)[source]¶ · Stack arrays in sequence depth wise (along third axis). Takes a sequence of arrays and stack them along the third axis to make a single array. Rebuilds arrays divided by dsplit. This is a simple way to stack 2D arrays (images) into a single 3D array for processing.
🌐
NumPy
numpy.org › devdocs › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v2.6.dev0 Manual
Stack arrays in sequence depth wise (along third axis) · This is equivalent to concatenation along the third axis after 2-D arrays of shape (M,N) have been reshaped to (M,N,1) and 1-D arrays of shape (N,) have been reshaped to (1,N,1). Rebuilds arrays divided by dsplit
🌐
NumPy
numpy.org › doc › 2.4 › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v2.4 Manual
Stack arrays in sequence depth wise (along third axis) · This is equivalent to concatenation along the third axis after 2-D arrays of shape (M,N) have been reshaped to (M,N,1) and 1-D arrays of shape (N,) have been reshaped to (1,N,1). Rebuilds arrays divided by dsplit
🌐
GeeksforGeeks
geeksforgeeks.org › python-numpy-dstack-method
Python | Numpy dstack() method | GeeksforGeeks
September 19, 2019 - Example #1 : In this example we can see that by using numpy.dstack() method, we are able to get the combined array in a stack index by index. ... # import numpy import numpy as np gfg1 = np.array([1, 2, 3]) gfg2 = np.array([4, 5, 6]) # using numpy.dstack() method print(np.dstack((gfg1, gfg2))) Output :
🌐
Programiz
programiz.com › python-programming › numpy › methods › dstack
NumPy dstack()
The dstack() method stacks the sequence of input arrays depthwise. import numpy as np array1 = np.array([[0, 1], [2, 3]]) array2 = np.array([[4, 5], [6, 7]])
🌐
SciPy
docs.scipy.org › doc › › numpy-1.13.0 › reference › generated › numpy.dstack.html
numpy.dstack — NumPy v1.13 Manual
June 10, 2017 - numpy.dstack(tup)[source]¶ · Stack arrays in sequence depth wise (along third axis). Takes a sequence of arrays and stack them along the third axis to make a single array. Rebuilds arrays divided by dsplit. This is a simple way to stack 2D arrays (images) into a single 3D array for processing.
🌐
IncludeHelp
includehelp.com › python › what-is-the-numpy-dstack-function-in-numpy.aspx
Python - What is the numpy.dstack() function in NumPy?
December 21, 2023 - In NumPy, the dstack() method is used to stack arrays in sequence depth-wise (along the third axis).
🌐
Ancisoft
ancisoft.com › blog › understanding-numpy-s-dstack-function
Understanding NumPy dstack Function: A Beginner's Guide to Depth-Wise Array Stacking Along the Third Axis — ancisoft.com
# Mismatched shapes: arr1 (2, 3), ... channels are red, green, and blue (RGB). dstack is ideal for combining separate RGB channel arrays into a single image array....
🌐
TutorialsPoint
tutorialspoint.com › numpy › numpy_dstack_function.htm
Numpy dstack() Function
The Numpy dstack() function is used to stack arrays in sequence depth-wise (along the third axis). This function is part of the numpy module. It is useful for stacking multiple arrays to create a 3D array, where each input array becomes a layer in