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.

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.

Broadcasting rules (must know)

When operating on two arrays, NumPy compares shapes from the trailing dimension.

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)

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 – Create a NumPy Array

Exercise 2 – Array Shape and Reshape

Exercise 3 – Array Arithmetic

If this helped you, consider buying me a coffee β˜•

Buy me a coffee

Was this page helpful?

Let us know how we did