如何计算两组数据之间的距离

3

我有两个数据框 - 学习数据有L行,测试数据有T行。

我想计算一个L*T的矩阵,其中包含相应元素之间的距离(欧几里得距离、曼哈顿距离、余弦相似度等)。

这是我的方法:

distance2 <- function (x1, x2) {
            temp <- x1 - x2
            sum(temp * temp)
}

m <- matrix(0,nrow(learnData),nrow(testData))
for(td in 1:nrow(testData)) {
    for(ld in 1:nrow(learnData)) {
        m[ld,td] <- distance2(testData[td,],learnData[ld,])                 
    }
}

我认为这可以用更紧凑的“R”方法完成。有什么想法吗? 谢谢。


2
对于欧几里得距离,最好使用fields包中的rdist。它比dist更快,并且更适合您的要求(两个数据框)。请参见https://dev59.com/sGLVa4cB1Zd3GeqP0d1Y#10220868。 - flodel
谢谢,我尝试了一下,它完全按照我的要求工作。我选择了代理包,它可以做同样的事情,但已经实现了许多不同的措施。 - Uros K
1个回答

5

我能想到两个选项:

  1. 使用已经编码好许多不同相似性系数的proxy包,可以分别计算两个数据框架之间的距离。
  2. analogue包有一个distance()函数,可以为您在两个数据帧上计算欧几里得和曼哈顿测量(但不是余弦距离)。

代理包非常好,提供了许多距离和相似度测量方法。它也能够满足我的需求,谢谢。 - Uros K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接