Bird
Raised Fist0
NumPydata~10 mins

Broadcasting compatibility check in NumPy - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Broadcasting compatibility check
Start with two arrays
↓
Compare shapes from right to left
↓
For each dimension:
↓
If all dims compatible
↓
Else
Check if two arrays can be broadcast together by comparing their shapes from right to left, dimension by dimension.
Execution Sample
NumPy
import numpy as np
shape1 = (4, 1, 3)
shape2 = (5, 1)
np.broadcast_shapes(shape1, shape2)
Check if arrays with shapes (4,1,3) and (5,1) can broadcast together.
Execution Table
StepDimension (from right)Size in shape1Size in shape2Compatibility CheckResult
1Rightmost (dim -1)313 vs 1: one is 1, compatibleCompatible
2Next (dim -2)151 vs 5: one is 1, compatibleCompatible
3Next (dim -3)4No dim (treated as 1)4 vs 1: one is 1, compatibleCompatible
4No more dims--All dims checkedBroadcasting possible
💡 All dimensions compatible by broadcasting rules
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
shape1(4,1,3)(4,1,3)(4,1,3)(4,1,3)(4,1,3)
shape2(5,1)(5,1)(5,1)(5,1)(5,1)
compatibilityUnknownCompatibleCompatibleCompatibleCompatible
Key Moments - 2 Insights
Why do we treat missing dimensions as size 1 when shapes have different lengths?
Because broadcasting rules say shorter shapes are left-padded with 1s to match lengths, as shown in step 3 of execution_table.
What happens if neither dimension sizes are equal nor one is 1?
Broadcasting fails immediately; this is shown by the compatibility check in execution_table where both sizes must be equal or one must be 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the compatibility result at step 2?
ANot compatible
BCompatible
CError
DUnknown
💡 Hint
Check the 'Result' column at step 2 in the execution_table.
At which step do we treat a missing dimension as size 1?
AStep 1
BStep 2
CStep 3
DNo step
💡 Hint
Look at the 'Size in shape2' column in execution_table where shape2 has no dim at step 3.
If shape1 was (4,2,3) instead of (4,1,3), what would happen at step 2?
ANot compatible
BError in step 1
CStill compatible
DBroadcasting possible
💡 Hint
Compare sizes at step 2: 2 vs 5, neither equal nor 1, see execution_table logic.
Concept Snapshot
Broadcasting compatibility check:
- Compare shapes from right to left
- Dimensions must be equal or one must be 1
- Missing dims treated as 1
- If all dims compatible, broadcasting works
- Else, error occurs
Full Transcript
Broadcasting compatibility check compares two array shapes from right to left. For each dimension, if sizes are equal or one is 1, they are compatible. If shapes differ in length, missing dimensions are treated as 1. If all dimensions pass these checks, broadcasting is possible. Otherwise, it fails. This process helps numpy combine arrays of different shapes safely.

Practice

(1/5)
1. Which of the following pairs of shapes are compatible for broadcasting in NumPy?
easy
A. (1, 2, 3) and (2, 3, 1)
B. (2, 3) and (3, 2)
C. (4, 5) and (4, 5, 1)
D. (3, 1) and (1, 4)

Solution

  1. Step 1: Understand broadcasting rules

    Broadcasting compares shapes from right to left. Dimensions must be equal or one must be 1.
  2. Step 2: Check each pair

    For (3,1) and (1,4), rightmost dims 1 and 4 are compatible (1 can broadcast to 4), left dims 3 and 1 compatible (1 can broadcast to 3). So compatible.
  3. Final Answer:

    (3, 1) and (1, 4) are compatible -> Option D
  4. Quick Check:

    Broadcast dims right to left, 1 can expand [OK]
Hint: Check shapes from right; 1 or equal dims broadcast [OK]
Common Mistakes:
  • Assuming all different shapes are compatible
  • Not comparing dimensions from right to left
  • Ignoring that 1 can broadcast to any size
2. Which of the following is the correct way to check broadcasting compatibility of shapes (2, 3) and (3,) using NumPy?
easy
A. numpy.broadcast_shapes((2, 3), (3,))
B. numpy.broadcast((2, 3), (3,))
C. numpy.broadcast_shapes([2, 3], 3)
D. numpy.broadcast((2, 3), (3))

Solution

  1. Step 1: Identify the correct function

    NumPy provides numpy.broadcast_shapes to check shape compatibility, which takes tuples as shape arguments.
  2. Step 2: Check argument types

    numpy.broadcast_shapes((2, 3), (3,)) uses numpy.broadcast_shapes with tuples, which is correct. numpy.broadcast_shapes([2, 3], 3) uses a scalar for the second argument, which is invalid for this function.
  3. Final Answer:

    numpy.broadcast_shapes((2, 3), (3,)) -> Option A
  4. Quick Check:

    Use numpy.broadcast_shapes with tuples [OK]
Hint: Use numpy.broadcast_shapes with tuples for shape check [OK]
Common Mistakes:
  • Using numpy.broadcast instead of numpy.broadcast_shapes
  • Passing scalars instead of sequences
  • Missing parentheses or wrong argument types
3. What will be the output of the following code?
import numpy as np
shape = np.broadcast_shapes((4, 1, 3), (1, 5, 3))
print(shape)
medium
A. (4, 1, 3)
B. (4, 5, 3)
C. (1, 5, 3)
D. ValueError: shapes not compatible

Solution

  1. Step 1: Compare shapes dimension-wise from right

    Rightmost dims: 3 and 3 match. Next dims: 1 and 5, 1 broadcasts to 5. Leftmost dims: 4 and 1, 1 broadcasts to 4.
  2. Step 2: Determine broadcasted shape

    Broadcasted shape is (4, 5, 3) combining max of each dimension.
  3. Final Answer:

    (4, 5, 3) -> Option B
  4. Quick Check:

    Broadcast dims max or 1 expands [OK]
Hint: Broadcast dims take max or 1 expands to max [OK]
Common Mistakes:
  • Confusing which dimension broadcasts to which
  • Expecting error when shapes are compatible
  • Mixing up order of dimensions
4. The following code throws an error. What is the cause?
import numpy as np
np.broadcast_shapes((3, 2), (2, 3))
medium
A. Shapes are not compatible for broadcasting
B. Function broadcast_shapes does not exist
C. Tuples must be of same length
D. Missing import statement

Solution

  1. Step 1: Check broadcasting rules for shapes (3, 2) and (2, 3)

    Compare from right: 2 vs 3 are different and neither is 1, so incompatible.
  2. Step 2: Confirm error cause

    Since shapes cannot broadcast, numpy.broadcast_shapes raises ValueError.
  3. Final Answer:

    Shapes are not compatible for broadcasting -> Option A
  4. Quick Check:

    Broadcast dims must be equal or 1 [OK]
Hint: Check dims right to left; mismatch without 1 causes error [OK]
Common Mistakes:
  • Thinking function is missing or typo
  • Assuming tuples must be same length
  • Ignoring broadcasting dimension rules
5. You have arrays with shapes (7, 1, 5) and (1, 3, 1). You want to add them using broadcasting. What will be the resulting shape?
hard
A. (1, 3, 5)
B. (7, 1, 1)
C. (7, 3, 5)
D. Cannot broadcast these shapes

Solution

  1. Step 1: Compare shapes from right to left

    Right dims: 5 and 1, 1 broadcasts to 5. Middle dims: 1 and 3, 1 broadcasts to 3. Left dims: 7 and 1, 1 broadcasts to 7.
  2. Step 2: Combine broadcasted dimensions

    Resulting shape is (7, 3, 5) taking max of each dimension.
  3. Final Answer:

    (7, 3, 5) -> Option C
  4. Quick Check:

    Broadcast dims max or 1 expands [OK]
Hint: Broadcast dims max or 1 expands to max [OK]
Common Mistakes:
  • Mixing up dimension order
  • Assuming shapes must be identical
  • Forgetting 1 can broadcast to any size
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