Skip to content

Broadcasting in NumPy

Broadcasting is NumPy’s ability to perform operations on arrays with different shapes by automatically expanding (virtually) smaller arrays.

This is a major reason NumPy code is concise and fast. Nothing is actually copied in memory — NumPy just repeats the smaller array’s values as if it were stretched to fit, without allocating that extra memory.

scalar
import numpy as np
 
arr = np.array([1, 2, 3])
print(arr + 10)  # [11 12 13]

Here, the scalar 10 is broadcast to match the shape (3,).

vector-matrix
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
vec = np.array([10, 20, 30])
 
print(mat + vec)

vec (shape (3,)) broadcasts across each row.

sketch Broadcasting a row vector across a matrix p5.js
The (3,) vector is virtually stretched down to match every row of the (2, 3) matrix — no extra memory is actually allocated.

When operating on two arrays, NumPy compares shapes from the trailing dimension (rightmost first) and works backward.

Two dimensions are compatible when:

  1. They are equal, OR
  2. One of them is 1

If dimensions are incompatible → broadcasting error.

column
import numpy as np
 
mat = np.array([
    [1, 2, 3],
    [4, 5, 6]
])
col = np.array([100, 200]).reshape(2, 1)
 
print(mat + col)

col has shape (2, 1) and broadcasts across columns.

error
import numpy as np
 
mat = np.zeros((2, 3))
vec = np.array([1, 2])
 
# mat + vec -> ValueError (shapes (2,3) and (2,) not compatible)

Fix by reshaping vec to a column vector if that’s what you intend:

fix
vec = vec.reshape(2, 1)
print(mat + vec)
diagram Broadcasting compatibility check mermaid
NumPy compares shapes from the trailing dimension inward; each axis pair must match or be 1.
  • Normalize columns: X / X.max(axis=0)
  • Center data: X - X.mean(axis=0)
  • Apply weights: X * weights

Continue to: NumPy Arithmetic Operations for element-wise math and matrix operations.

Exercise 2 – Broadcast a Row Vector Across a Matrix

Section titled “Exercise 2 – Broadcast a Row Vector Across a Matrix”

pch.coffeeTagline

pch.coffeeCta

pch.feedbackHeading

pch.feedbackSubheading