Broadcasting Explained

Broadcasting is the mechanism NumPy uses to automatically expand arrays of different shapes so they can be combined in a single element-wise operation — no loops and no manual copying required.

Learn Broadcasting Explained in our free NumPy course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick reference.

Part of the free Numpy course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.

You'll see broadcasting with scalars, row vectors, and column vectors, learn the right-to-left rules that decide whether two shapes are compatible, and understand why some combinations raise a ValueError.

You have already used broadcasting without knowing it. When you write arr * 2 , the scalar 2 is broadcast across every element of the array — NumPy treats the lone number as if it were a same-shaped array full of twos, without ever building it in memory. A scalar matches any shape, so it is the easiest case of all.

Broadcasting really shines when you combine a 1D array with a 2D array. If the 1D array's length equals the matrix's column count, NumPy adds it to every row automatically.

NumPy lines up the two shapes from the right and compares each pair of dimensions:

When a pair of dimensions is neither equal nor 1, broadcasting fails with a ValueError — and reading the shapes in the message is the fastest way to debug it.

A plain 1D array broadcasts across rows . To broadcast across columns instead — a different value per row — turn it into a column vector of shape (n, 1) with reshape(-1, 1) , where -1 tells NumPy to infer that dimension.

Replace each ___ so the program adds a different bonus to each row of the scores matrix.

Expected output: [[85 90 95] [80 85 90]] . (Answers: reshape , + .)

❌ ValueError: operands could not be broadcast together

Two dimensions differ and neither is 1, so the shapes are incompatible.

✅ Fix: print both .shape values and reshape one array (often reshape(-1, 1) ) so every dimension pair is equal or 1.

A 1D array broadcasts across rows by default, not columns.

✅ Fix: use reshape(-1, 1) to make a column vector when you want per-row values.

Subtract each column's mean from every value in that column using broadcasting — a common first step in data preprocessing.

Lesson 10 complete — broadcasting unlocked!

You can now combine arrays of different shapes, apply the right-to-left rules in your head, build column vectors with reshape(-1, 1) , and recognize exactly why a ValueError appears.

🚀 Up next: Aggregations — summarize arrays with sum, mean, and the all-important axis argument.

Practice quiz

What is broadcasting in NumPy?

  • Sending arrays over a network
  • Sorting arrays by shape
  • Always copying the smaller array
  • Stretching arrays of different shapes so they combine element-wise

Answer: Stretching arrays of different shapes so they combine element-wise. Broadcasting virtually stretches shapes to match, with no real copying.

For arr = [10, 20, 30, 40], what is arr + 5?

The scalar 5 is broadcast and added to every element.

Adding row [10, 20, 30] to matrix [[1,2,3],[4,5,6]] gives what?

  • An error

The (3,) row is added to every row of the (2, 3) matrix.

Two dimensions are compatible for broadcasting when...

  • both are even
  • their product is equal
  • they are equal, or one of them is 1
  • neither is 1

Answer: they are equal, or one of them is 1. Dimensions match if they are equal or one is 1 (which stretches).

What is the result shape of np.ones((3, 4)) + np.ones((4,))?

  • (4,)
  • (7, 4)
  • Error
  • (3, 4)

Answer: (3, 4). (4,) pads to (1, 4), then the 1 stretches to 3, giving (3, 4).

What is the result shape of np.ones((3, 1)) + np.ones((1, 4))?

  • (3, 4)
  • (1, 1)
  • (3, 1)
  • Error

Answer: (3, 4). Both length-1 dimensions stretch, producing (3, 4).

Why does adding a (2,) array to a (2, 3) array raise a ValueError?

  • Arrays must be square
  • Aligned right-to-left, 3 vs 2 are unequal and neither is 1
  • 1D and 2D can never combine
  • The dtype differs

Answer: Aligned right-to-left, 3 vs 2 are unequal and neither is 1. Right-aligned, 3 and 2 differ and neither is 1, so broadcasting fails.

Which call turns a 1D array into a column vector for per-row broadcasting?

  • vec.flatten()
  • vec.transpose()
  • vec.reshape(-1, 1)
  • vec.ravel()

Answer: vec.reshape(-1, 1). reshape(-1, 1) makes an (n, 1) column that broadcasts down the rows.

Adding column [[10],[20]] to matrix [[1,2,3],[4,5,6]] gives what?

The (2,1) column adds 10 to row 0 and 20 to row 1.

What does the -1 mean in reshape(-1, 1)?

  • NumPy infers that dimension automatically
  • Reverse the array
  • Use the last element
  • Drop a dimension

Answer: NumPy infers that dimension automatically. -1 tells NumPy to compute that dimension from the array size.