首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >距离矩阵计算

距离矩阵计算
EN

Stack Overflow用户
提问于 2018-02-26 11:10:42
回答 2查看 192关注 0票数 2

例如,我们有两个矩阵:

代码语言:javascript
复制
A=
     [,1] [,2] [,3]
[1,]   -2    1    0
[2,]    1    0   -1
[3,]    0   -1    4

代码语言:javascript
复制
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行之间的距离矩阵,换句话说,用我们的例子:

代码语言:javascript
复制
      [,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”应用于结果矩阵,但在这种情况下,我还获得了同一矩阵的行之间的距离。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-26 11:22:13

也许这条路?

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2018-02-26 11:23:21

代码语言:javascript
复制
# First build a matrix
  Dist.M <- matrix(0, nrow = nrow(A), ncol = ncol(B))

# Complete the matrix
  for (i in 1:nrow(A)){
    for (j in 1:nrow(B)){
         Dist.M[i,j] <- dist(rbind(A[i,],B[j,])
    }
  }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48987142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档