Bird
Raised Fist0
SciPydata~5 mins

Distance computation (distance.cdist) in SciPy - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the function scipy.spatial.distance.cdist compute?

cdist computes the distance between each pair of points from two collections of points. It returns a matrix where each element is the distance between a point in the first set and a point in the second set.

Click to reveal answer
beginner
What are the inputs required by distance.cdist?

Two arrays of points (2D arrays), where each row is a point and each column is a dimension. Optionally, a metric string to specify the type of distance (like 'euclidean', 'cityblock').

Click to reveal answer
beginner
Name two common distance metrics you can use with cdist.

Euclidean distance (straight line) and Manhattan distance (sum of absolute differences).

Click to reveal answer
intermediate
How does cdist differ from computing distances in a loop?

cdist is optimized and vectorized, so it is much faster and simpler than manually looping over points to compute distances.

Click to reveal answer
intermediate
What shape does the output of cdist have if the first input has shape (m, n) and the second input has shape (p, n)?

The output shape is (m, p), where each element [i, j] is the distance between the i-th point in the first set and the j-th point in the second set.

Click to reveal answer
What does scipy.spatial.distance.cdist return?
AA single distance value between two points
BA matrix of distances between points in two sets
CA list of points sorted by distance
DA boolean matrix indicating if points are equal
Which of these is NOT a valid metric for cdist?
Aeuclidean
Bcityblock
Crandom
Dcosine
If you have 5 points in set A and 3 points in set B, what will be the shape of the output from cdist(A, B)?
A(1, 15)
B(3, 5)
C(8, 1)
D(5, 3)
Why is cdist preferred over manual loops for distance calculation?
AIt is faster and simpler to use
BIt only works for 1D points
CIt returns distances as strings
DIt uses less memory
Which Python library provides the cdist function?
Ascipy
Bpandas
Cnumpy
Dmatplotlib
Explain how you would use scipy.spatial.distance.cdist to find distances between two sets of points.
Think about inputs, metric, and output shape.
You got /4 concepts.
    Describe the difference between Euclidean and Manhattan distance metrics used in cdist.
    Imagine walking in a city grid vs flying straight.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What does the scipy.spatial.distance.cdist function do?

      easy
      A. Generates random points within a specified range.
      B. Calculates the sum of all points in a single array.
      C. Computes distances between two sets of points and returns a matrix of distances.
      D. Sorts points in ascending order based on their coordinates.

      Solution

      1. Step 1: Understand the function purpose

        cdist calculates distances between two groups of points, not sums or sorting.
      2. Step 2: Identify the output type

        The function returns a matrix showing distances from each point in the first group to each point in the second.
      3. Final Answer:

        Computes distances between two sets of points and returns a matrix of distances. -> Option C
      4. Quick Check:

        cdist = distance matrix [OK]
      Hint: Remember: cdist = cross distances between two point sets [OK]
      Common Mistakes:
      • Thinking cdist sums points instead of distances
      • Confusing cdist with sorting or random generation
      • Assuming cdist returns a single distance value
      2.

      Which of the following is the correct way to import and use cdist from scipy.spatial.distance?

      ?
      easy
      A. from scipy import cdist result = cdist(A, B, metric='euclidean')
      B. import scipy.distance.cdist result = cdist(A, B, metric='euclidean')
      C. import cdist from scipy.spatial.distance result = cdist(A, B, metric='euclidean')
      D. from scipy.spatial.distance import cdist result = cdist(A, B, metric='euclidean')

      Solution

      1. Step 1: Check correct import syntax

        The correct import is from scipy.spatial.distance import cdist. Other forms are invalid or cause errors.
      2. Step 2: Confirm usage syntax

        Calling cdist(A, B, metric='euclidean') is correct to compute Euclidean distances.
      3. Final Answer:

        from scipy.spatial.distance import cdist result = cdist(A, B, metric='euclidean') -> Option D
      4. Quick Check:

        Correct import and call = from scipy.spatial.distance import cdist result = cdist(A, B, metric='euclidean') [OK]
      Hint: Use 'from scipy.spatial.distance import cdist' to import [OK]
      Common Mistakes:
      • Using incorrect import statements causing ImportError
      • Trying to import cdist directly from scipy
      • Using wrong syntax like 'import cdist from ...'
      3.

      Given the code below, what is the output?

      import numpy as np
      from scipy.spatial.distance import cdist
      
      A = np.array([[0, 0], [1, 1]])
      B = np.array([[1, 0], [2, 2]])
      result = cdist(A, B, metric='euclidean')
      print(result)
      medium
      A. [[1. 2.82842712] [1. 1.41421356]]
      B. [[1.41421356 2.23606798] [1. 1.41421356]]
      C. [[1. 1.41421356] [1.41421356 2.23606798]]
      D. [[0. 1.41421356] [1. 2.23606798]]

      Solution

      1. Step 1: Calculate distances from points in A to points in B

        Distances: - From [0,0] to [1,0] = sqrt((1-0)^2 + (0-0)^2) = 1.0 - From [0,0] to [2,2] = sqrt((2-0)^2 + (2-0)^2) ≈ 2.8284 - From [1,1] to [1,0] = sqrt((1-1)^2 + (0-1)^2) = 1.0 - From [1,1] to [2,2] = sqrt((2-1)^2 + (2-1)^2) ≈ 1.4142
      2. Step 2: Form the distance matrix

        Matrix rows correspond to points in A, columns to points in B: [[1.0, 2.8284], [1.0, 1.4142]]
      3. Final Answer:

        [[1. 2.82842712] [1. 1.41421356]] -> Option A
      4. Quick Check:

        Euclidean distances matrix = [[1. 2.82842712] [1. 1.41421356]] [OK]
      Hint: Calculate each pair distance carefully, row by row [OK]
      Common Mistakes:
      • Mixing row and column order in the output matrix
      • Using wrong distance formula (e.g., Manhattan instead of Euclidean)
      • Rounding errors causing confusion
      4.

      What is wrong with the following code snippet?

      import numpy as np
      from scipy.spatial.distance import cdist
      
      A = np.array([[0, 0], [1, 1]])
      B = np.array([1, 0])
      result = cdist(A, B, metric='euclidean')
      print(result)
      medium
      A. The metric 'euclidean' is not supported by cdist.
      B. B should be a 2D array, but it is 1D, causing a shape error.
      C. cdist requires both inputs to be lists, not numpy arrays.
      D. The import statement for cdist is incorrect.

      Solution

      1. Step 1: Check input array shapes

        cdist expects both inputs to be 2D arrays representing sets of points. Here, B is 1D, which is invalid.
      2. Step 2: Understand error cause

        Passing 1D array B causes a shape mismatch error because cdist tries to interpret rows as points.
      3. Final Answer:

        B should be a 2D array, but it is 1D, causing a shape error. -> Option B
      4. Quick Check:

        Input arrays must be 2D for cdist [OK]
      Hint: Always use 2D arrays for both inputs in cdist [OK]
      Common Mistakes:
      • Passing 1D arrays instead of 2D arrays
      • Assuming cdist accepts lists only
      • Using unsupported metric names
      5.

      You have two sets of points representing locations of stores and customers:

      stores = np.array([[0, 0], [5, 5], [10, 10]])
      customers = np.array([[1, 1], [6, 6], [8, 8], [12, 12]])

      Using cdist, how can you find the closest store for each customer?

      hard
      A. Compute the distance matrix with cdist(customers, stores) and find the index of the minimum distance in each row.
      B. Compute the distance matrix with cdist(stores, customers) and find the index of the maximum distance in each column.
      C. Use cdist(stores, customers) and sum all distances to find closest stores.
      D. Calculate Euclidean distance manually for each pair without using cdist.

      Solution

      1. Step 1: Compute distance matrix from customers to stores

        Use cdist(customers, stores) to get distances where each row is a customer and each column is a store.
      2. Step 2: Find closest store for each customer

        For each customer (row), find the index of the minimum distance value. This index corresponds to the closest store.
      3. Final Answer:

        Compute the distance matrix with cdist(customers, stores) and find the index of the minimum distance in each row. -> Option A
      4. Quick Check:

        Closest store = min distance per customer row [OK]
      Hint: cdist(customers, stores), then argmin per row finds closest store [OK]
      Common Mistakes:
      • Swapping order of inputs causing wrong distance matrix shape
      • Using max instead of min to find closest
      • Summing distances instead of finding minimum
      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