Stacking Arrays in NumPy
Horizontal, Vertical, and Depth

Introduction to Stacking in NumPy

In real-world data processing, combining arrays is often a necessity. Whether you're appending features, merging images, or just reorganizing data — stacking in NumPy is your go-to operation. Unlike concatenation which merges arrays along an existing axis, stacking creates a new one. Let's unravel how this works.

Why Learn Stacking?

Stacking provides a clean, readable, and efficient way to combine multiple arrays. It’s especially helpful when working with matrices, image channels, or multi-dimensional datasets.

Basic Setup

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

Now that we have two simple 1D arrays, let’s start stacking.

1. Vertical Stacking: np.vstack

Stacks arrays in sequence vertically (row wise). A new row is created for each array.

np.vstack((a, b))
array([[1, 2, 3],
       [4, 5, 6]])

This creates a 2D array with 2 rows and 3 columns.

2. Horizontal Stacking: np.hstack

Stacks arrays in sequence horizontally (column wise).

np.hstack((a, b))
array([1, 2, 3, 4, 5, 6])

Since a and b are both 1D arrays, the result is still 1D — just longer.

3. Depth Stacking: np.dstack

Stacks arrays along the third dimension (depth).

np.dstack((a, b))
array([[[1, 4],
        [2, 5],
        [3, 6]]])

Notice the triple brackets — it’s a 3D array with shape (1, 3, 2). Think of this like stacking colored image channels together (Red, Green, Blue).

4. General Stacking: np.stack

With np.stack, you can specify exactly which axis you want to stack on.

np.stack((a, b), axis=0)
array([[1, 2, 3],
       [4, 5, 6]])
np.stack((a, b), axis=1)
array([[1, 4],
       [2, 5],
       [3, 6]])

Axis 0 stacks them as rows, axis 1 stacks them as columns. The flexibility here is incredibly powerful when reshaping complex datasets.

What to Watch Out For

  • All arrays must have the same shape along all axes except the one you’re stacking on.
  • Mixing dimensions (e.g., stacking 1D with 2D) throws an error.
  • Use np.newaxis to reshape arrays where needed before stacking.

Verification Example

a.shape  # (3,)
b.shape  # (3,)
np.vstack((a, b)).shape     # (2, 3)
np.hstack((a, b)).shape     # (6,)
np.dstack((a, b)).shape     # (1, 3, 2)

When Should You Use Stacking?

If you want to:

  • Build 2D arrays from multiple 1D vectors — use vstack or stack.
  • Combine features side-by-side — use hstack.
  • Create channels or batch inputs — use dstack.

Conclusion

Stacking is one of those fundamental array operations that unlocks a whole new world of possibilities. Whether you’re assembling datasets, feeding models, or manipulating matrices — mastering stacking ensures your data is always in the right shape.

Next Step

In the next tutorial, we’ll look at splitting arrays and how to reverse the stacking process smartly.