【问题标题】:Signed distance matrix in RR中的有符号距离矩阵
【发布时间】:2013-02-19 15:57:58
【问题描述】:

[注意,我写了这个问题,然后找到了答案。我想也许其他人想知道它,所以我发布答案以防万一。我不确定这是否是“完成的事情”]。

假设我想要一个向量的有符号距离矩阵,即距离并不总是正数,但可以是负数。你不能使用

dist()

因为它返回绝对值。

【问题讨论】:

    标签: r matrix distance


    【解决方案1】:

    这是另一种方法,它更快并且需要更少的内存:

    y <- sample (1 : 4)
    distmat <- outer (y, y, `-`) 
    

    产量:

    > distmat
         [,1] [,2] [,3] [,4]  
    [1,]    0    1    3    2  
    [2,]   -1    0    2    1  
    [3,]   -3   -2    0   -1  
    [4,]   -2   -1    1    0
    
    ## not sure why you want the upper triangular NA
    distmat[upper.tri(distmat,diag=TRUE)]<-NA
    

    但你可能想要:

    > as.dist (distmat)
       1  2  3
    2 -1      
    3 -3 -2   
    4 -2 -1  1
    

    【讨论】:

      【解决方案2】:

      使用申请:

      y<-seq(1:10)
      distmat<-as.data.frame(apply(as.matrix(y),1,function(x) y-x))
      distmat[upper.tri(distmat,diag=TRUE)]<-NA
      

      【讨论】:

      • 你也可以得到distmatreplicate(length(y), y) - t(replicate(length(y), y))
      • 还有,你这里生成的结果可以通过dist(1:10, method="manhattan")得到
      • 只是希望您打算使用 en.wikipedia.org/wiki/Signed_distance 中的符号距离定义,在这种情况下,您的内部/外部是什么并不清楚。让我们明确一点:“距离”严格定义为非负数。您是否在寻找本质上是矢量位置的内容(例如 (-3,-2) 处与原点具有欧几里德距离 sqrt(3^2 + 2^2) 的点)?
      • @Arun,但 OP 特别要求获得负距离的可能性,method = "manhattan" 不满足(这个例子很糟糕,因为它没有显示这个要求。
      • @cbeleites,是的,我明白了,但最终结果删除了负值。这就是为什么我提到“你在这里产生的结果”......它可能应该是distmat[lower.tri(distmat, diag=TRUE)] &lt;- NA
      猜你喜欢
      • 2022-01-12
      • 2016-12-29
      • 1970-01-01
      • 2013-06-20
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多