A distance matrix contains the distances computed pairwise between the vectors of matrix/ matrices. scipy.spatial package provides us distance_matrix() method to compute the distance matrix. Generally matrices are in the form of 2-D array and the vectors of the matrix are matrix rows ( 1-D array).
Syntax: scipy.spatial.distance_matrix(x, y, p=2) Parameters: x : (M, K) Matrix of M vectors, each of dimension K. y : (N, K) Matrix of N vectors, each of dimension K. p : float, 1 <= p <= infinity, defines which Minkowski p-norm to use. Returns: (M, N) ndarray / matrix containing the distance from every vector in x to every vector in y.
Note: the column dimensions of both x, and y matrices must be same.
We can use different values for p to apply different types of the distances to compute the distance matrix.
p = 1, Manhattan Distance p = 2, Euclidean Distance p = ∞, Chebychev Distance
Example 1.
We compute the distance matrix for two matrices x, and y. Both matrices have same dimension (3, 2). So the distance matrix has dimension (3,3). Using p=2, the distances are calculated as Minkowski 2-norm (or Euclidean distance).
Python3
# Python program to compute distance matrix # import important libraries import numpy as np from scipy.spatial import distance_matrix # Create the matrices x = np.array([[ 1 , 2 ],[ 2 , 1 ],[ 2 , 2 ]]) y = np.array([[ 5 , 0 ],[ 1 , 2 ],[ 2 , 0 ]]) # Display the matrices print ( "matrix x:\n" , x) print ( "matrix y:\n" , y) # compute the distance matrix dist_mat = distance_matrix(x, y, p = 2 ) # display distance matrix print ( "Distance Matrix:\n" , dist_mat) |
Output:
Example 2.
We compute the distance matrix for two matrices x, and y. Both matrices have different dimensions. Matrix x has dimension (3,2) and matrix y has dimension (5,2). So the distance matrix has dimension (3,5).
Python3
# Python program to compute distance matrix # import important libraries import numpy as np from scipy.spatial import distance_matrix # Create the matrices x = np.array([[ 1 , 2 ],[ 2 , 1 ],[ 2 , 2 ]]) y = np.array([[ 0 , 0 ],[ 0 , 0 ],[ 1 , 1 ],[ 1 , 1 ],[ 1 , 2 ]]) # Display the matrices print ( "matrix x:\n" , x) print ( "matrix y:\n" , y) # compute the distance matrix dist_mat = distance_matrix(x, y, p = 2 ) # display distance matrix print ( "Distance Matrix:\n" , dist_mat) |
Output:
Example 3.
We compute the distance matrix using single matrix ( i.e. x). Matrix x has dimension (3,2). Same matrix x is given as parameter y. The distance matrix has dimension (3,3).
Python3
# Python program to compute distance matrix # import important libraries import numpy as np from scipy.spatial import distance_matrix # Create the matrix x = np.array([[ 1 , 2 ],[ 2 , 1 ],[ 2 , 2 ]]) # Display the matrix print ( "matrix x:\n" , x) # compute the distance matrix dist_mat = distance_matrix(x, x, p = 2 ) # display distance matrix print ( "Distance Matrix:\n" , dist_mat) |
output:
Note: Notice that the above distance matrix is a symmetric matrix. When both x, and y matrices are same, the distance matrix is a symmetric matrix.
Example 4.
We compute the distance matrix for two matrices x, and y. Both matrices have different dimensions. Matrix x has dimension (3,2) and matrix y has dimension (5,2). So the distance matrix has dimension (3,5). Using p=1, the distances are calculated as Minkowski 1-norm (or Manhattan Distance).
Python3
# Python program to compute distance matrix # import important libraries import numpy as np from scipy.spatial import distance_matrix # Create the matrices x = np.array([[ 1 , 2 ],[ 2 , 1 ],[ 2 , 2 ]]) y = np.array([[ 5 , 0 ],[ 1 , 2 ],[ 2 , 0 ]]) # Display the matrices print ( "matrix x:\n" , x) print ( "matrix y:\n" , y) # compute the distance matrix dist_mat = distance_matrix(x, y, p = 1 ) # display distance matrix print ( "Distance Matrix:\n" , dist_mat) |
Output:
Example 5.
We compute the distance matrix for two matrices x, and y. Both matrices have dimension (2, 5). So the distance matrix has dimension (3,5). Using p=2, the distances are calculated as Minkowski 2-norm (or Euclidean Distance).
Python3
# Python program to compute distance matrix # import important libraries import numpy as np from scipy.spatial import distance_matrix # Create the matrices x = np.array([[ 1 , 2 , 3 , 4 , 5 ],[ 2 , 1 , 0 , 3 , 4 ]]) y = np.array([[ 0 , 0 , 0 , 0 , 1 ],[ 1 , 1 , 1 , 1 , 2 ]]) # Display the matrices print ( "matrix x:\n" , x) print ( "matrix y:\n" , y) # compute the distance matrix dist_mat = distance_matrix(x, y, p = 2 ) # display distance matrix print ( "Distance Matrix:\n" , dist_mat) |
Output: