如何计算 R 中 n 维的欧氏距离?
How to calculate Euclidean distance in R for n-dimensions?
我正在尝试编写一个函数来计算 n 维上两点之间的欧氏距离。
我有以下代码:
euc_dist <- function(x1, x2) sqrt(sum((x1 - x2) ^ 2))
这在两点之间起作用,x1
和 x2
。但是,我正在尝试对两点之间的 n 维执行此操作。
例如,在 Python 中,它适用于:
def euc_distance(p, q):
return math.sqrt(sum((px - qx) ** 2 for px, qx in zip(p, q)))
即你可以输入例如三个维度(两点之间):
euc_distance([2, 1, 4], [4, 9, 8])
如何编辑我的 R 代码来做同样的事情?
正如评论中所指出的,您可以使用函数 dist()
,其中 returns 行之间的欧氏距离,而不管列数(维度)。或者,如果你想使用你的函数,你可以这样做:
euc_dist <- function(x1, x2){
return(sqrt(sum((x1 - x2)^2)))
}
不要忘记 R 函数末尾的 return()
,这是一个常见的“错误”,会带来不必要的麻烦
当将输入传递给函数时,改为这样做,因为这是在 R 中使用向量的正确方法:
euc_dist(c(2, 1, 4), c(4, 9, 8))
您可以使用 dist
:
dist(x)
# 1
#2 9.165151
或每手使用 apply
和 diff
sqrt(sum(apply(x, 2, diff)^2))
#sqrt(sum((x[1,] - x[2,])^2)) #Alternative
#[1] 9.165151
数据:
x <- rbind(c(2,1,4), c(4,9,8))
除了其他答案,你还可以使用norm
:
x1 <- c(2,1,4)
x2 <- c(4,9,8)
norm(as.matrix(x1 - x2), "F")
#R> [1] 9.165151
我正在尝试编写一个函数来计算 n 维上两点之间的欧氏距离。
我有以下代码:
euc_dist <- function(x1, x2) sqrt(sum((x1 - x2) ^ 2))
这在两点之间起作用,x1
和 x2
。但是,我正在尝试对两点之间的 n 维执行此操作。
例如,在 Python 中,它适用于:
def euc_distance(p, q):
return math.sqrt(sum((px - qx) ** 2 for px, qx in zip(p, q)))
即你可以输入例如三个维度(两点之间):
euc_distance([2, 1, 4], [4, 9, 8])
如何编辑我的 R 代码来做同样的事情?
正如评论中所指出的,您可以使用函数 dist()
,其中 returns 行之间的欧氏距离,而不管列数(维度)。或者,如果你想使用你的函数,你可以这样做:
euc_dist <- function(x1, x2){
return(sqrt(sum((x1 - x2)^2)))
}
不要忘记 R 函数末尾的 return()
,这是一个常见的“错误”,会带来不必要的麻烦
当将输入传递给函数时,改为这样做,因为这是在 R 中使用向量的正确方法:
euc_dist(c(2, 1, 4), c(4, 9, 8))
您可以使用 dist
:
dist(x)
# 1
#2 9.165151
或每手使用 apply
和 diff
sqrt(sum(apply(x, 2, diff)^2))
#sqrt(sum((x[1,] - x[2,])^2)) #Alternative
#[1] 9.165151
数据:
x <- rbind(c(2,1,4), c(4,9,8))
除了其他答案,你还可以使用norm
:
x1 <- c(2,1,4)
x2 <- c(4,9,8)
norm(as.matrix(x1 - x2), "F")
#R> [1] 9.165151