Calculate distance between two points in Python

In this tutorial, we will look at how to calculate the distance between two points in Python with the help of some examples.

Python - Distance between two points

There are a number of ways to compute the distance between two points in Python. You can compute the distance directly or use methods from libraries like math, scipy, numpy, etc.

We generally refer to the Euclidean distance when talking about the distance between two points. To calculate the Euclidean distance between the points (x1, y1) and (x2, y2) you can use the formula:

Distance between two points in a two-dimensional plane

For example, the distance between points (2, 3) and (5, 7) is 5. Note that the above formula can be extended to n-dimensions.

Euclidean distance between two points in an n-dimensional subspace.

Now that we know how the distance between two points is computed mathematically, we can proceed to compute it in Python.

Python has a number of libraries that help you compute distances between two points, each represented by a sequence of coordinates. Before we proceed to use off-the-shelf methods, let’s directly compute the distance between points (x1, y1) and (x2, y2).

# point a
x1 = 2
y1 = 3
# point b
x2 = 5
y2 = 7

# distance b/w a and b
distance = ((x1 - x2)**2 + (y1 - y2)**2)**0.5
# display the result
print("Distance between points ({}, {}) and ({}, {}) is {}".format(x1,y1,x2,y2,distance))

Output:

Distance between points (2, 3) and (5, 7) is 5.0

You can see that we get the distance between the points (2, 3) and (5, 7) as 5. Note that the above formula works only for points in two dimensions.

Let’s now write a generalized function that can handle points with any number of dimensions.

def get_distance(p, q):
    """ 
    Return euclidean distance between points p and q
    assuming both to have the same number of dimensions
    """
    # sum of squared difference between coordinates
    s_sq_difference = 0
    for p_i,q_i in zip(p,q):
        s_sq_difference += (p_i - q_i)**2
    
    # take sq root of sum of squared difference
    distance = s_sq_difference**0.5
    return distance

# check the function
a = (2, 3, 6)
b = (5, 7, 1)
# distance b/w a and b
d = get_distance(a, b)
# display the result
print(d)

Output:

7.0710678118654755

You can see that we used the function to get distance between two points with three dimensions each. We can now use this function to calculate distances between two points with any dimensions.

Note that the above function can further be improved by using vectorization to calculate the difference between the coordinates.

You can use the math.dist() function to get the Euclidean distance between two points in Python. For example, let’s use it the get the distance between two 3-dimensional points each represented by a tuple.

import math

# two points
a = (2, 3, 6)
b = (5, 7, 1)

# distance b/w a and b
d = math.dist(a, b)
# display the result
print(d)

Output:

7.0710678118654755

We get the same value as above.

The Euclidean distance is equivalent to the l2 norm of the difference between the two points which can be calculated in numpy using the numpy.linalg.norm() function.

import numpy as np

# two points
a = np.array((2, 3, 6))
b = np.array((5, 7, 1))

# distance b/w a and b
d = np.linalg.norm(a-b)
# display the result
print(d)

Output:

7.0710678118654755

We get the same result as above. Note that, here, we pass the difference between points a and b as a numpy array to the the np.linalg.norm() function.

The scipy library contains a number of useful functions of scientific computation in Python. Use the distance.euclidean() function available in scipy.spatial to calculate the Euclidean distance between two points in Python.

from scipy.spatial import distance

# two points
a = (2, 3, 6)
b = (5, 7, 1)

# distance b/w a and b
d = distance.euclidean(a, b)
# display the result
print(d)

Output:

7.0710678118654755

We get the same result as above. For more on the distance function, refer to its documentation.

With this, we come to the end of this tutorial. The code examples and results presented in this tutorial have been implemented in a Jupyter Notebook with a python (version 3.8.3) kernel having numpy version 1.18.5 and pandas version 1.0.5


Subscribe to our newsletter for more informative guides and tutorials.
We do not spam and you can opt out any time.


Leave a Reply

Your email address will not be published. Required fields are marked *