¿Cómo calcular la distancia de Manhattan en R?

La distancia de Manhattan es una métrica de distancia entre dos puntos en un espacio vectorial N-dimensional. Se define como la suma de la distancia absoluta entre las coordenadas en las dimensiones correspondientes. 

Por ejemplo, en un espacio bidimensional que tiene dos puntos Punto1 (x 1 ,y 1 ) y Punto2 (x 2 ,y 2 ), la distancia Manhattan está dada por |x 1 – x 2 | + |y 1 – y 2 |.

Método 1: Uso del enfoque de fórmulas

En R Manhattan la distancia se calcula con respecto a los vectores. La distancia de Manhattan entre los dos vectores viene dada por,  

Σ|vect1i - vect2i|

dónde,

  • vect1 es el primer vector
  • vect2 es el segundo vector

Por ejemplo, tenemos dos vectores, vect1 como (3, 6, 8, 9) y vect2 como (1, 7, 8, 10). Su distancia Manhattan está dada por, |3 – 1| + |6 – 7| + |8 – 8| + |9 – 10| que es igual a 4.

A continuación se muestra la implementación utilizando dos vectores de igual longitud:

Ejemplo 1:

R

# Function to calculate Manhattan distance
# abs() function calculate the absolute difference
# between corresponding vector elements
# sum() function calculates the sum of the
# absolute difference between
# corresponding elements of vect1 and vect2
manhattanDistance <- function(vect1, vect2){
     dist <- abs(vect1 - vect2)
     dist <- sum(dist)
     return(dist)
}
 
# Initializing a vector
vect1 <- c(3, 6, 8, 9)
 
# Initializing another vector
vect2 <- c(1, 7, 8, 10)
 
 
print("Manhattan distance between vect1 and vect2 is: ")
 
# Call the function to calculate Manhattan
# distance between vectors
manhattanDistance(vect1, vect2)

Producción:

[1] "Manhattan distance between vect1 and vect2 is: "
[1] 4

Ejemplo 2:

Si los dos vectores tienen una longitud diferente, el compilador muestra un mensaje de advertencia. A continuación se muestra la implementación utilizando dos vectores que tienen longitudes desiguales.

R

# Function to calculate Manhattan distance
# abs() function calculate the absolute difference
# between corresponding vector elements
# sum() function calculates the sum of the
# absolute difference between
# corresponding elements of vect1 and vect2
manhattanDistance <- function(vect1, vect2){
     dist <- abs(vect1 - vect2)
     dist <- sum(dist)
     return(dist)
}
 
# Initializing two vectors having unequal length
vect1 <- c(14, 13, 24, 18)
vect2 <- c(13, 12, 33, 11, 12)
 
print("Manhattan distance between vect1 and vect2 is: ")
 
# Call the function to calculate Manhattan distance
manhattanDistance(vect1, vect2)

Producción:

Método 2: Usar la función dist()

R proporciona una función incorporada mediante la cual podemos encontrar la distancia de Manhattan entre cada par único de vectores en un vector bidimensional.

Sintaxis:

dist(2dVect, método = “manhattan”)

Parámetros :

  • 2dVect: vector bidimensional
  • método: la medida de distancia a utilizar. Este puede ser uno de “euclidean”, “maximum”, “manhattan”, “canberra”, “binary”

Tipo de retorno:

Devuelve un objeto de clase «dist»

Ejemplo 1:

A continuación se muestra la implementación para encontrar la distancia de Manhattan usando la función dist():

R

# Initializing a vector
vect1 < - c(1, 16, 8, 10, 100, 20)
 
# Initializing another vector
vect2 < - c(1, 7, 18, 90, 50, 21)
 
# Initializing another vector
vect3 < - c(3, 10, 11, 40, 150, 210)
 
 
# Initializing another vector
vect4 < - c(2, 1, 4, 7, 8, 10)
 
 
# Initializing another vector
vect5 < - c(1, 4, 8, 3, 100, 104)
 
# Initializing another vector
vect6 < - c(3, 7, 11, 23, 110, 114)
 
 
# Row bind vectors into a single matrix
twoDimensionalVect < - rbind(vect1, vect2, vect3, vect4, vect5, vect6)
 
print("Manhattan distance between each pair of vectors is: ")
cat("\n\n")
 
# Calculate Manhattan distance between vectors
# using built in dist method
# By passing two-dimensional vector as a parameter
# Since we want to calculate manhattan distance between
# each unique pair of vectors
# That is why we are passing manhattan as a method
dist(twoDimensionalVect, method="manhattan")

Producción:

Ejemplo 2:

Tenga en cuenta que se requiere que la longitud de todos los vectores presentados bajo el vector bidimensional sea la misma; de lo contrario, el compilador R produce un error de tiempo de compilación.

R

# Initializing a vector
vect1 <- c(4, 3, 5, 7, 8, 2, 10, 12)
 
# Initializing another vector
vect2 <- c(5, 9, 4, 9, 7, 17)
 
# Initializing another vector
vect3 <- c(3, 10, 9, 11, 13, 12)
 
 
# Initializing another vector
vect4 <- c(4, 7, 6, 12, 10, 12)
 
 
# Initializing another vector
vect5 <- c(3, 5, 12, 10, 1, 17)
 
# Initializing another vector
vect6 <- c(4, 3, 1, 8, 7, 2)
 
 
# Using rind function to bind vectors in a 2-d vector
# Note that all vectors are not of the same length
twoDimensionalVect <- rbind(vect1, vect2, vect3, vect4, vect5, vect6)
 
 
print("Manhattan distance between each pair of vectors is: ")
cat("\n\n")
 
# Calculate Manhattan distance between vectors
# using built in dist method
# By passing two-dimensional vector as a parameter
# Since we want to calculate Manhattan distance
# between each pair of vectors
# That is why we are passing "manhattan" as a method
dist(twoDimensionalVect, method = "manhattan")

Producción:

Publicación traducida automáticamente

Artículo escrito por bhuwanesh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *