Bird
Raised Fist0
NumPydata~10 mins

Broadcasting for distance matrices in NumPy - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to create a 2D array of points using NumPy.

NumPy
import numpy as np
points = np.array([1])
Drag options to blanks, or click blank then click option'
A[[1, 2], [3, 4], [5, 6]]
B[(1, 2), (3, 4), (5, 6)]
C[1, 2, 3, 4]
D[1, 2]
Attempts:
3 left
💡 Hint
Common Mistakes
Using a flat list instead of a list of lists.
Using tuples inside the list without nesting.
2fill in blank
medium

Complete the code to calculate the difference between each point and all points using broadcasting.

NumPy
diff = points[:, np.newaxis, :] - [1]
Drag options to blanks, or click blank then click option'
Apoints
Bnp.array(points)
Cpoints.T
Dnp.newaxis
Attempts:
3 left
💡 Hint
Common Mistakes
Using transpose which changes shape incorrectly.
Using np.newaxis alone without the array.
3fill in blank
hard

Fix the error in the code to compute the squared distances between points.

NumPy
sq_dist = np.sum(diff[1]2, axis=2)
Drag options to blanks, or click blank then click option'
A//
B*
C**
D^
Attempts:
3 left
💡 Hint
Common Mistakes
Using '*' instead of '**' for squaring.
Summing along the wrong axis.
4fill in blank
hard

Complete the code to compute the Euclidean distance matrix from squared distances.

NumPy
dist_matrix = np.sqrt(sq_dist) + [1]
Drag options to blanks, or click blank then click option'
Bnp.zeros_like(sq_dist)
Cnp.ones_like(sq_dist)
Dnp.abs(sq_dist)
Attempts:
3 left
💡 Hint
Common Mistakes
Adding ones or absolute values which change the distances.
Adding unnecessary terms that distort results.
5fill in blank
hard

Fill all three blanks to create a dictionary of points with their distances greater than 2.

NumPy
dist_dict = {tuple(points[i]): dist_matrix[i, j] for i in range(len(points)) for j in range(len(points)) if dist_matrix[i, j] [1] 2 and i != j and tuple(points[j]) [2] dist_dict and dist_dict[tuple(points[j])] [3] dist_matrix[i, j]}
Drag options to blanks, or click blank then click option'
A>
Bin
C<
Dnot in
Attempts:
3 left
💡 Hint
Common Mistakes
Using '<' instead of '>' for distance comparison.
Checking 'in' instead of 'not in' for dictionary keys.

Practice

(1/5)
1. What does broadcasting help you do when calculating distance matrices in numpy?
easy
A. Convert points into categorical data
B. Sort points by their distance values
C. Reduce the dimensionality of points automatically
D. Calculate distances between all pairs of points without explicit loops

Solution

  1. Step 1: Understand broadcasting concept

    Broadcasting allows numpy to perform operations on arrays of different shapes by automatically expanding their dimensions.
  2. Step 2: Apply broadcasting to distance calculation

    By adding new axes, numpy can subtract all pairs of points at once, avoiding explicit loops.
  3. Final Answer:

    Calculate distances between all pairs of points without explicit loops -> Option D
  4. Quick Check:

    Broadcasting = Calculate distances without loops [OK]
Hint: Broadcasting avoids loops for pairwise distance calculations [OK]
Common Mistakes:
  • Thinking broadcasting sorts or reduces data
  • Confusing broadcasting with data conversion
  • Assuming broadcasting changes data types
2. Which of the following numpy expressions correctly adds a new axis to a 2D array points to prepare for broadcasting in distance calculation?
easy
A. points[:, None, :]
B. points[None, :, :]
C. points[:, :, None]
D. points[None, None, :]

Solution

  1. Step 1: Identify the shape of points

    Assuming points has shape (n, d), where n is number of points and d is dimensions.
  2. Step 2: Add new axis for broadcasting

    Adding None at axis 1: points[:, None, :] changes shape to (n, 1, d), allowing subtraction with (1, n, d) array.
  3. Final Answer:

    points[:, None, :] -> Option A
  4. Quick Check:

    New axis at position 1 = points[:, None, :] [OK]
Hint: Add new axis with None at correct position for broadcasting [OK]
Common Mistakes:
  • Adding new axis at wrong dimension
  • Using too many None indices
  • Confusing axis order in slicing
3. Given the code below, what is the shape of the resulting distances array?
import numpy as np
points = np.array([[1, 2], [4, 6], [7, 8]])
diff = points[:, None, :] - points[None, :, :]
distances = np.sqrt(np.sum(diff**2, axis=-1))
medium
A. (3, 3)
B. (3, 2)
C. (2, 3)
D. (2, 2)

Solution

  1. Step 1: Analyze shapes after broadcasting

    points shape is (3, 2). After points[:, None, :] shape is (3, 1, 2), and points[None, :, :] shape is (1, 3, 2). Broadcasting subtraction results in shape (3, 3, 2).
  2. Step 2: Calculate distances shape

    Sum over last axis (-1) reduces (3, 3, 2) to (3, 3). Square root keeps shape same.
  3. Final Answer:

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

    Distance matrix shape = (number of points, number of points) = (3, 3) [OK]
Hint: Distance matrix shape = (n_points, n_points) [OK]
Common Mistakes:
  • Confusing axis for sum operation
  • Ignoring broadcasting shape expansion
  • Assuming output shape matches input points shape
4. Identify the error in the following code snippet for computing Euclidean distances:
import numpy as np
points = np.array([[0, 0], [3, 4]])
diff = points[:, :, None] - points[:, None, :]
distances = np.sqrt(np.sum(diff**2, axis=-1))
medium
A. Missing import statement for numpy
B. Incorrect axis placement for new axes, causing shape mismatch
C. Using np.sum instead of np.mean
D. Square root should be applied before sum

Solution

  1. Step 1: Check new axis placement

    Using points[:, :, None] and points[:, None, :] adds new axes at wrong positions, resulting in incompatible shapes for subtraction.
  2. Step 2: Correct axis placement for broadcasting

    Correct way is points[:, None, :] and points[None, :, :] to get shapes (n,1,d) and (1,n,d) for broadcasting.
  3. Final Answer:

    Incorrect axis placement for new axes, causing shape mismatch -> Option B
  4. Quick Check:

    Axis placement error = shape mismatch [OK]
Hint: New axes must align for broadcasting subtraction [OK]
Common Mistakes:
  • Adding new axes at wrong positions
  • Confusing axis indices in slicing
  • Applying sqrt before sum
5. You have a 3D array points of shape (5, 4, 3) representing 5 sets of 4 points in 3D space. How would you compute the pairwise Euclidean distance matrices for each set using broadcasting?
hard
A. Use diff = points[None, :, :, :] - points[:, :, None, :] then sum squares over axis 1
B. Reshape points to (20, 3) and compute distances with loops
C. Use diff = points[:, :, None, :] - points[:, None, :, :] then sum squares over last axis
D. Compute distances by flattening points to 1D array

Solution

  1. Step 1: Understand points shape and goal

    points shape (5, 4, 3) means 5 sets, each with 4 points in 3D.
  2. Step 2: Apply broadcasting for pairwise distances per set

    Subtract points with shapes (5, 4, 1, 3) and (5, 1, 4, 3) using points[:, :, None, :] - points[:, None, :, :]. Then sum squares over last axis (3) and sqrt.
  3. Final Answer:

    Use diff = points[:, :, None, :] - points[:, None, :, :] then sum squares over last axis -> Option C
  4. Quick Check:

    Broadcast sets with new axes at 2 and 1 [OK]
Hint: Add axes at positions 2 and 1 for sets and points [OK]
Common Mistakes:
  • Mixing axis order for broadcasting
  • Flattening instead of broadcasting
  • Using loops instead of vectorized operations
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