Skip to content

Broadcasting in NumPy

What is broadcasting?

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.

Simple example: add scalar

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

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

Example: add vector to matrix

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

vecvec (shape (3,)(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.

Broadcasting rules (must know)

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 11

If dimensions are incompatible → broadcasting error.

Example: column vector + matrix

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)
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)

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

Common broadcasting error

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)
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 vecvec to a column vector if that’s what you intend:

fix
vec = vec.reshape(2, 1)
print(mat + vec)
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.

Why broadcasting is useful in analytics

  • Normalize columns: X / X.max(axis=0)X / X.max(axis=0)
  • Center data: X - X.mean(axis=0)X - X.mean(axis=0)
  • Apply weights: X * weightsX * weights

Next

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

🧪 Try It Yourself

Exercise 1 – Broadcast a Scalar

Exercise 2 – Broadcast a Row Vector Across a Matrix

Exercise 3 – Fix a Shape Mismatch

If this helped you, consider buying me a coffee ☕

Buy me a coffee

Was this page helpful?

Let us know how we did