我们有两个矩阵,例如:
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/