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: