【问题标题】:R comparing features to create matrix of distancesR比较特征以创建距离矩阵
【发布时间】:2013-09-23 19:30:36
【问题描述】:

我有一个 R 问题。我有一个算法可以做到这一点,但想知道是否有更简洁的方法来执行以下操作:

假设你有以下矩阵:

        [,1] [,2] [,3] [,4] [,5]
[A,]    0    0    0    0    1
[B,]    0    0    0    1    1
[C,]    0    0    1    1    1
[D,]    0    0    1    1    0
[E,]    1    0    0    0    0
[F,]    1    1    1    0    0

现在我想创建一个每行与另一行的差异矩阵(即距离矩阵),类似于(虽然我将它填满了一半,但它只是获取顶部的镜像):

       [,A] [,B] [,C] [,D] [,E] [,F]
[A,]    0     
[B,]    1    0     
[C,]    2    1    0     
[D,]    3    2    1    0    
[E,]    2    3    4    3    0
[F,]    4    5    4    3    2    0

我的方法是使用循环将每一行的列与下面的相应行列进行比较,但对于大型矩阵,它效率不高。关于如何更好地做到这一点的任何想法?

谢谢

【问题讨论】:

  • 使用dist(t(mat),type="manhattan")(或类似的东西)?

标签: r matrix


【解决方案1】:

正如评论中所说,使用distmanhattan 方法:

dt <- read.table(text='     [,1] [,2] [,3] [,4] [,5]
[A,]    0    0    0    0    1
[B,]    0    0    0    1    1
[C,]    0    0    1    1    1
[D,]    0    0    1    1    0
[E,]    1    0    0    0    0
[F,]    1    1    1    0    0')

mm <- as.matrix(dt)
dist(mm,method='manhattan' ,diag=TRUE)

      [A,] [B,] [C,] [D,] [E,] [F,]
[A,]    0                         
[B,]    1    0                    
[C,]    2    1    0               
[D,]    3    2    1    0          
[E,]    2    3    4    3    0     
[F,]    4    5    4    3    2    0

【讨论】:

  • 哇,这太酷了!所以当我说 dist_cmat = dist(mm,method='manhattan') 变量 dist_cmat 不是矩阵时,是否有可能从这个函数中得到一个矩阵?
猜你喜欢
  • 2015-06-11
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 2017-12-30
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多