r - 距离矩阵计算

标签 r matrix

我们有两个矩阵,例如:

A=
     [,1] [,2] [,3]
[1,]   -2    1    0
[2,]    1    0   -1
[3,]    0   -1    4

B=
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    2    3
[3,]    3    1    2
[4,]    2    3    1
[5,]    3    1    2

我想计算 A 行和 B 行之间的距离矩阵。换句话说,使用我们的示例:

      [,1]                   [,2]                    [,3]
[1,]    dist(B[1,]-A[1,])      dist(B[1,]-A[2,])       dist(B[1,]-A[3,])
[2,]    dist(B[2,]-A[1,])      dist(B[2,]-A[2,])       dist(B[2,]-A[3,])
[3,]    dist(B[3,]-A[1,])      dist(B[3,]-A[2,])       dist(B[3,]-A[3,])
[4,]    dist(B[4,]-A[1,])      dist(B[4,]-A[2,])       dist(B[4,]-A[3,])
[5,]    dist(B[5,]-A[1,])      dist(B[5,]-A[2,])       dist(B[5,]-A[3,])

我正在考虑使用函数“dist”,它计算并返回数据矩阵行之间距离的距离矩阵。但它仅适用于单个矩阵。我尝试使用命令“rbind(A,B)”并将“dist”应用于生成的矩阵,但在这种情况下,我还获得了同一矩阵的行之间的距离。

最佳答案

也许是这样?

A = matrix(c(-2, 1, 0, 1, 0, -1, 0, -1, 4), ncol = 3, byrow = TRUE)
B = matrix(c(1, 2, 3, 1, 2, 3, 3, 1, 2, 2, 3, 1, 3, 1, 2), ncol = 3, byrow = TRUE)

t(sapply(1:nrow(B), function(x) {
  sqrt(rowSums(t(t(A)-B[x,])^2))
}))

         [,1]     [,2]     [,3]
[1,] 4.358899 4.472136 3.316625
[2,] 4.358899 4.472136 3.316625
[3,] 5.385165 3.741657 4.123106
[4,] 4.582576 3.741657 5.385165
[5,] 5.385165 3.741657 4.123106

关于r - 距离矩阵计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48987142/

相关文章:

r - 为什么这个相关矩阵没有重新排列(corrr)?

r - 优化 R 中的向量索引和矩阵创建

r - 如何使输入轨道日志保持 Shiny ,然后打印并保存?

regex - 持续模式匹配来识别 SQL 子句

math - 将复杂矩阵转换分解为一系列简单转换?

c++ - 获取白色像素的坐标(OpenCV)

r - 如何将向量 append 为 R 矩阵中的列?

r - 根据两列分配唯一 ID

r - dplyr 0.5.0 使用列索引进行变异

r - R 中的因子分析