Bird
Raised Fist0
SciPydata~30 mins

Distance computation (distance.cdist) in SciPy - Mini Project: Build & Apply

Choose your learning style10 modes available
Distance Computation with scipy.spatial.distance.cdist
📖 Scenario: Imagine you work in a delivery company. You have a list of warehouses and a list of customer locations. You want to find out how far each customer is from each warehouse to plan deliveries efficiently.
🎯 Goal: You will create two sets of points representing warehouses and customers. Then, you will use scipy.spatial.distance.cdist to calculate the distances between every warehouse and every customer.
📋 What You'll Learn
Create two lists of 2D points for warehouses and customers
Set a distance metric variable
Use scipy.spatial.distance.cdist to compute distances
Print the resulting distance matrix
💡 Why This Matters
🌍 Real World
Delivery companies and logistics planners use distance calculations to optimize routes and reduce delivery times.
💼 Career
Data scientists and analysts often compute distances between points for clustering, recommendation systems, and geographic analysis.
Progress0 / 4 steps
1
Create warehouse and customer location lists
Create a variable called warehouses as a list of points: [1, 2], [3, 4], and [5, 6]. Also create a variable called customers as a list of points: [7, 8] and [9, 10].
SciPy
Hint

Use lists of lists to represent points. Each point has two numbers for x and y coordinates.

2
Set the distance metric
Create a variable called metric and set it to the string 'euclidean' to specify the distance type.
SciPy
Hint

The metric is a string that tells the function how to measure distance. 'euclidean' means straight-line distance.

3
Compute distances using scipy.spatial.distance.cdist
Import cdist from scipy.spatial.distance. Then create a variable called distances by calling cdist with warehouses, customers, and metric as arguments.
SciPy
Hint

Use from scipy.spatial.distance import cdist to import the function. Then call it with the two lists and the metric.

4
Print the distance matrix
Print the variable distances to see the matrix of distances between warehouses and customers.
SciPy
Hint

Use print(distances) to display the matrix. Each row is a warehouse, each column a customer.

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