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).
# 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).
# 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).
# 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).
# 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).
# 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: