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

最新更新