如何在二维空间中计算所有成对距离

15

假设我有关于动物在二维平面上位置的数据(通过直接从上方监视摄像机进行确定)。例如,一个15行2列的矩阵(每个动物一行,包含x和y位置)。

animal.ids<-letters[1:15]  
xpos<-runif(15) # x coordinates 
ypos<-runif(15) # y coordinates 
raw.data.t1<-data.frame(xpos, ypos)
  rownames(raw.data.t1) = animal.ids
我想计算动物之间的两两距离。也就是从第一行的动物a到第2行、第3行......第15行中的动物的距离,并避免冗余的距离计算,计算所有行的这个步骤后,函数的输出结果应该是所有两两距离的平均值。我需要澄清的是,我的意思是简单的线性距离,公式为d<-sqrt(((x1-x2)^2)+((y1-y2)^2))。非常感谢您的帮助。
另外,如何扩展到具有任意数量偶数列(每两列表示给定时间点的x和y位置)的类似矩阵中。这里的目标是计算每两列的平均两两距离,并输出一个表格,其中包括每个时间点及其对应的平均两两距离。以下是具有3个时间点的数据结构示例:
xpos1<-runif(15) 
ypos1<-runif(15) 
xpos2<-runif(15) 
ypos2<-runif(15)
xpos3<-runif(15) 
ypos3<-runif(15)
pos.data<-cbind(xpos1, ypos1, xpos2, ypos2, xpos3, ypos3)
    rownames(pos.data) = letters[1:15]
2个回答

14

恰如其名的dist()将会实现这个:

x <- matrix(rnorm(100), nrow=5)
dist(x)

         1        2        3        4
2 7.734978                           
3 7.823720 5.376545                  
4 8.665365 5.429437 5.971924         
5 7.105536 5.922752 5.134960 6.677726

更多细节请参考?dist


3

为什么要比较d<-sqrt(((x1-x2)^2)+((y1-y2)^2))

改为比较d^2<-(((x1-x2)^2)+((y1-y2)^2))。这样会更省事。


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