【问题标题】:how to calculate Euclidean distance between two matrices in R如何计算R中两个矩阵之间的欧几里得距离
【发布时间】:2016-01-30 20:10:24
【问题描述】:

我有两个相同维度的巨大矩阵。我想计算它们之间的欧几里得距离。我知道这是功能:

euclidean_distance <- function(p,q){
  sqrt(sum((p - q)^2))
}

and if these are two matrices:


set.seed(123)
    mat1 <- data.frame(x=sample(1:10000,3), 
                       y=sample(1:10000,3), 
                       z=sample(1:10000,3))
    mat2 <- data.frame(x=sample(1:100,3), 
                       y=sample(1:100,3), 
                       z=sample(1:1000,3))

那么我需要一个新的 3*3 矩阵来显示 mat1 和 mat2 的每对值之间的欧几里得距离。

有什么建议吗?

【问题讨论】:

  • @AndresT 我希望输出也是一个矩阵

标签: r


【解决方案1】:

这是基本功能outer的工作:

outer(mat1,mat2,Vectorize(euclidean_distance))
xyz x 9220.40 9260.736 8866.034 是 12806.35 12820.086 12121.927 z 11630.86 11665.869 11155.823

【讨论】:

  • 这给出了错误形式错误(FUN):找不到对象'euclidean_distance'
  • 查看名为 euclidean_distance() 的 OP 函数。它不是内置的 R 函数。
【解决方案2】:

你可以使用包pdist:

library(pdist)
dists <- pdist(t(mat1), t(mat2))
as.matrix(dists)
         [,1]      [,2]      [,3]
[1,]  9220.40  9260.735  8866.033
[2,] 12806.35 12820.086 12121.927
[3,] 11630.86 11665.869 11155.823

这将为您提供所有对的欧几里得距离:(mat1$x,mat2$x), (mat1$x,mat2$y),..., (mat1$z,mat2$z)

【讨论】:

  • 这样计算对之间的欧几里得距离吗?
  • 是的,这相当于将您的函数 euclidean_distance() 应用于所有对。
  • 我试图通过 install.packages(pdist) 安装该库,但它给出了错误:install.packages 中的错误:找不到对象“pdist”。如何安装这个库?
  • 可能是install.packages("pdist")?
  • @Grec001 是的,它是每对“观测”之间的成对距离(L2)。或如文档中所述:“计算两个观察矩阵或一个矩阵的两个子集之间的距离矩阵”
猜你喜欢
  • 2018-06-14
  • 1970-01-01
  • 2014-06-08
  • 2018-03-14
  • 2011-09-05
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
相关资源
最近更新 更多