2012-09-16 59 views
3

我有2个数据帧 - 用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

对于euclidean,您最好使用'fields'包中的'rdist'。它比'dist'更快,更符合您的要求(两个数据帧)。请参阅http://stackoverflow.com/a/10220868/1201032 – flodel

+0

谢谢,我试过了,它的工作原理与我想要的完全一样。我选择了代理包来做同样的事情,但是已经实施了很多不同的措施。 –

回答

5

两个选项涌现在脑海里:

  1. 使用代理包,其中有许多已经编码这些差异性系数,并且可以计算本作单独
  2. 两个数据帧的模拟包,具有功能distance(),它可以在两个数据帧(但不是余弦距离)上为您计算欧几里德和曼哈顿度量值。
+0

代理软件包很棒,真的有很多的距离和相似性的措施。它做我想要的,谢谢。 –

相关问题