Bird
Raised Fist0
NumPydata~5 mins

np.vstack() and np.hstack() in NumPy

Choose your learning style10 modes available
Introduction

We use np.vstack() and np.hstack() to join arrays together easily. They help us combine data by stacking arrays vertically or horizontally.

When you have multiple lists of data and want to combine them into one bigger list by stacking rows.
When you want to add new data as new columns to an existing dataset.
When you want to merge small arrays into a bigger array for analysis or visualization.
Syntax
NumPy
import numpy as np

# Vertical stack: stacks arrays row-wise (one on top of another)
np.vstack((array1, array2, ...))

# Horizontal stack: stacks arrays column-wise (side by side)
np.hstack((array1, array2, ...))

Both functions take a tuple of arrays as input.

Arrays must have compatible shapes: for vstack, arrays must have the same number of columns; for hstack, arrays must have the same number of rows.

Examples
Stacks two 1D arrays as rows, creating a 2x3 array.
NumPy
import numpy as np

array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])

# Vertical stack
result_v = np.vstack((array1, array2))
print(result_v)
Stacks two 3x1 arrays side by side, creating a 3x2 array.
NumPy
import numpy as np

array1 = np.array([[1], [2], [3]])
array2 = np.array([[4], [5], [6]])

# Horizontal stack
result_h = np.hstack((array1, array2))
print(result_h)
Stacking empty arrays vertically results in an empty 2D array with shape (2, 0).
NumPy
import numpy as np

# Edge case: empty arrays
empty1 = np.array([])
empty2 = np.array([])

# Vertical stack of empty arrays
result_empty_v = np.vstack((empty1, empty2))
print(result_empty_v)
Stacks two single-element arrays side by side, resulting in a 1D array with two elements.
NumPy
import numpy as np

# Edge case: single element arrays
single1 = np.array([10])
single2 = np.array([20])

# Horizontal stack
result_single_h = np.hstack((single1, single2))
print(result_single_h)
Sample Program

This program shows how to stack two 1D arrays vertically and horizontally. For horizontal stacking, arrays are reshaped to columns first.

NumPy
import numpy as np

# Create two arrays
array_one = np.array([10, 20, 30])
array_two = np.array([40, 50, 60])

print("Original arrays:")
print("array_one:", array_one)
print("array_two:", array_two)

# Vertical stack: stack as rows
stacked_vertical = np.vstack((array_one, array_two))
print("\nAfter np.vstack():")
print(stacked_vertical)

# Horizontal stack: stack as columns
# First reshape to 2D column vectors
array_one_col = array_one.reshape(-1, 1)
array_two_col = array_two.reshape(-1, 1)

print("\nArrays reshaped to columns:")
print("array_one_col:\n", array_one_col)
print("array_two_col:\n", array_two_col)

stacked_horizontal = np.hstack((array_one_col, array_two_col))
print("\nAfter np.hstack():")
print(stacked_horizontal)
OutputSuccess
Important Notes

Time complexity: Both np.vstack() and np.hstack() run in O(n) time, where n is the total number of elements in the arrays.

Space complexity: They create a new array, so space is O(n) for the combined size.

Common mistake: Trying to stack arrays with incompatible shapes causes errors. Always check shapes before stacking.

Use vstack when you want to add rows (stack arrays vertically). Use hstack when you want to add columns (stack arrays horizontally).

Summary

np.vstack() stacks arrays vertically (row-wise).

np.hstack() stacks arrays horizontally (column-wise).

Arrays must have compatible shapes to stack without errors.

Practice

(1/5)
1. What does np.vstack() do with arrays?
easy
A. Stacks arrays vertically, adding rows
B. Stacks arrays horizontally, adding columns
C. Flattens arrays into one dimension
D. Splits arrays into smaller parts

Solution

  1. Step 1: Understand vertical stacking

    np.vstack() stacks arrays by adding rows one below another.
  2. Step 2: Compare with horizontal stacking

    np.hstack() stacks arrays side by side by adding columns, so it is different.
  3. Final Answer:

    Stacks arrays vertically, adding rows -> Option A
  4. Quick Check:

    np.vstack() = vertical stack [OK]
Hint: Remember 'v' in vstack means vertical stacking [OK]
Common Mistakes:
  • Confusing vertical and horizontal stacking
  • Thinking vstack flattens arrays
  • Assuming vstack splits arrays
2. Which of the following is the correct syntax to horizontally stack two arrays a and b using NumPy?
easy
A. np.hstack(a, b)
B. np.hstack[a, b]
C. np.hstack((a, b))
D. np.hstack{a, b}

Solution

  1. Step 1: Check function call syntax

    NumPy functions use parentheses and tuples for multiple arrays, so np.hstack((a, b)) is correct.
  2. Step 2: Identify incorrect syntax

    Square brackets, missing parentheses, or curly braces are invalid for function calls in Python.
  3. Final Answer:

    np.hstack((a, b)) -> Option C
  4. Quick Check:

    Correct function call uses parentheses and tuple [OK]
Hint: Use double parentheses for multiple arrays in hstack [OK]
Common Mistakes:
  • Using square brackets instead of parentheses
  • Passing arrays without tuple parentheses
  • Using curly braces which are invalid
3. What is the output of the following code?
import numpy as np
x = np.array([[1, 2], [3, 4]])
y = np.array([[5, 6], [7, 8]])
result = np.vstack((x, y))
print(result)
medium
A. [[1 2 5 6] [3 4 7 8]]
B. [[1 2 3 4] [5 6 7 8]]
C. [[1 2] [5 6] [3 4] [7 8]]
D. [[1 2] [3 4] [5 6] [7 8]]

Solution

  1. Step 1: Understand np.vstack behavior

    It stacks arrays vertically, so rows of y come below rows of x.
  2. Step 2: Combine arrays row-wise

    Result has 4 rows: first two from x, next two from y, each with 2 columns.
  3. Final Answer:

    [[1 2] [3 4] [5 6] [7 8]] -> Option D
  4. Quick Check:

    Vertical stack adds rows below [OK]
Hint: vstack adds rows; hstack adds columns [OK]
Common Mistakes:
  • Confusing vstack with hstack output
  • Expecting horizontal concatenation
  • Misreading array shapes
4. What error will occur when running this code?
import numpy as np
a = np.array([1, 2, 3])
b = np.array([[4, 5, 6], [7, 8, 9]])
result = np.hstack((a, b))
print(result)
medium
A. No error, outputs concatenated array
B. TypeError because inputs are not lists
C. SyntaxError due to wrong function call
D. ValueError due to incompatible shapes

Solution

  1. Step 1: Check shapes of arrays

    a is shape (3,), b is shape (2,3). They differ in first dimension.
  2. Step 2: Understand hstack requirements

    np.hstack() stacks arrays along their second axis if possible. Here, a is 1D and b is 2D, but NumPy broadcasts a to shape (1,3) and stacks along axis 1, resulting in shape (3,3).
  3. Step 3: Result

    No error occurs; arrays are concatenated.
  4. Final Answer:

    No error, outputs concatenated array -> Option A
  5. Quick Check:

    NumPy broadcasts 1D array and concatenates [OK]
Hint: NumPy can broadcast 1D arrays when stacking [OK]
Common Mistakes:
  • Assuming hstack requires same number of rows
  • Confusing ValueError with TypeError
  • Ignoring NumPy broadcasting rules
5. Given two arrays:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6, 7], [8, 9, 10]])
Which method correctly combines them into a single array with shape (2, 5) by stacking horizontally?
hard
A. np.vstack((a, b))
B. np.hstack((a, b))
C. np.hstack((a.T, b.T)).T
D. np.vstack((a.T, b.T)).T

Solution

  1. Step 1: Check shapes of arrays

    a shape is (2, 2), b shape is (2, 3). Both have 2 rows, so horizontal stacking is possible.
  2. Step 2: Apply np.hstack

    np.hstack((a, b)) concatenates columns, resulting in shape (2, 5).
  3. Step 3: Verify other options

    np.vstack((a, b)) would fail due to different column counts; transposes complicate shape and are unnecessary here.
  4. Final Answer:

    np.hstack((a, b)) -> Option B
  5. Quick Check:

    Same rows, hstack adds columns [OK]
Hint: For same rows, use hstack to add columns [OK]
Common Mistakes:
  • Using vstack with different column counts
  • Overcomplicating with transpose
  • Mixing up row and column dimensions
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard