【发布时间】:2014-04-09 12:27:30
【问题描述】:
我需要生成一个数据帧的每一行与另一个数据帧的所有其他行之间具有最小欧几里德距离的数据帧。我的两个数据帧都很大(大约 40,000 行)。这是我到目前为止可以解决的问题。
x<-matrix(c(3,6,3,4,8),nrow=5,ncol=7,byrow = TRUE)
y<-matrix(c(1,4,4,1,9),nrow=5,ncol=7,byrow = TRUE)
sed.dist<-numeric(5)
for (i in 1:(length(sed.dist))) {
sed.dist[i]<-(sqrt(sum((y[i,1:7] - x[i,1:7])^2)))
}
但这仅在 i=j 时有效。我本质上需要的是通过逐行遍历每一行来找到最小欧几里得距离(y[1,1:7],然后是 y[2,1:7]依此类推,直到“y”数据帧的i = 5)与“x”数据帧的所有行(x [i,1:7])。每次执行此操作时,我都需要它来找到最小欧几里得距离对于 y 数据帧的第 i 行和 x 数据帧的所有行的每次计算,并将其存储在另一个数据帧中。
【问题讨论】:
-
这个
sqrt(colSums((y[1, ] - t(x))^2))计算y中第1 行与x中所有行的距离。你想要这个的min,并且,对于y中的每隔一行重复? -
是的,这就是我想要的
标签: r loops for-loop euclidean-distance