R中两个数据帧的行之间的欧几里得距离

Euclidean Distances between rows of two data frames in R

计算 R 中的欧氏距离很容易。可以找到一个很好的例子 。矢量化形式为:

sqrt((known_data[, 1] - unknown_data[, 1])^2 + (known_data[, 2] - unknown_data[, 2])^2)

获取一个数据框的每一行与另一个数据框的所有行的欧氏距离的最快、最有效的方法是什么?来自 apply() 系列的特定功能?谢谢!

也许你可以像下面那样尝试 outer + dist

outer(
  1:nrow(known_data),
  1:nrow(unknown_data),
  FUN = Vectorize(function(x,y) dist(rbind(known_data[x,],unknown_data[y,])))
)

如果您愿意,我会在两个数据帧的组合上使用 dist() 函数(非常有效),然后删除不需要的距离。示例:

df1 <- iris[1:5, -5]
df2 <- iris[6:10, -5]

all_distances <- dist(rbind(df1, df2))
all_distances <- as.matrix(all_distances)

# remove unneeded distances
all_distances[1:5, 1:5] <- NA
all_distances[6:10, 6:10] <- NA