我正在使用大量的点列表(每个点都有三个维度x,y,z)。
我对R很新,所以我想知道什么是表示这类信息的最佳方式。据我所知,数组允许我表示任何多维数据,所以目前我正在使用:
> points<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
> points
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 2 2 2 3 -- x dim
[2,] 2 3 4 5 7 8 -- y dim
[3,] 0 0 0 0 0 0 -- z dim
目的是执行一些计算来计算两组点之间的欧氏距离,例如:
points1<-array( c(1,2,0,1,3,0,2,4,0,2,5,0,2,7,0,3,8,0), dim=c(3,6) )
points2<-array( c(2,2,0,1,4,0,2,3,0,2,4,0,2,6,0,2,8,0), dim=c(3,6) )
(在这个意义上的任何暗示也将受到高度赞赏)
答案 0 :(得分:4)
您可以使用函数dist获取距离矩阵。此函数计算数据矩阵的行之间的距离,因此我转换了 points 数组
dist(t(points),method = "euclidean")
计算距离矩阵的另一个类似函数是来自包amap
的{{3}},它提供了更多的距离测量:(“欧几里得”,“最大”,“曼哈顿”,“堪培拉”,“二进制“,”皮尔逊“,”相关“,”长矛“,”肯德尔“)
答案 1 :(得分:4)
计算这样存储的两组点之间的欧几里德距离很容易:
sqrt(colSums((points1 - points2)^2))
虽然我建议在列中存储维度。在这种情况下,代码变为:
sqrt(rowSums((points1 - points2)^2))
答案 2 :(得分:2)
您可能想看看CRAN Task View for Statial Data Analysis提供的内容 - 有许多合适的套餐。
答案 3 :(得分:1)
我建议使用你的矩阵转置,否则你可能最终会调用函数t(),而不是你原来的。
除此之外,这可能是您想要的数据结构。你当然可以使用数据框来完成它,但我认为你最好不要在这种情况下这样做。