【问题标题】:Find points of vector that have min euclidean distance in R在R中找到具有最小欧几里德距离的向量点
【发布时间】:2015-09-30 12:58:42
【问题描述】:

在 R 中我有两个向量

a = c(25,24,25)
b = c(33,33,32,31,26)

我正在使用dist() 函数来计算a,b 向量值的欧几里得距离。

我想找到与a 中的一点距离最小的b 的值。

目前我的代码是:

 minDist = min(dist(c(a,b), method="euclidean"))

如何找到距离最小的点?

【问题讨论】:

    标签: r euclidean-distance


    【解决方案1】:

    我宁愿这样进行:

    m = outer(a,b, FUN=function(x,y) (x-y)**2)
    
    which(m==min(m), arr.ind=T)
         row col
    [1,]   1   5
    [2,]   3   5
    

    声明b 中的元素5 最接近a 中的元素13

    确实:

    #> m
    #     [,1] [,2] [,3] [,4] [,5]
    #[1,]   64   64   49   36    1
    #[2,]   81   81   64   49    4
    #[3,]   64   64   49   36    1
    

    代替outer快速解决方案是:

    nc = length(b)
    nr = length(a)
    m  = (matrix(a, ncol=nc, nrow=nr) - matrix(b, ncol=nc, nrow=nr, byrow=T))**2
    

    【讨论】:

    • 感谢您的回复!你能解释一下结果吗?结果也是b[5]a[3]?那么如果其中的结果存储在w中,结果会是什么样子呢?
    • 我添加了一些解释;)这取决于您使用outer 的顺序(我们可以写outer(b,a, ...)
    • 知道了!刚刚看到你编辑的回复!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-04
    • 2017-05-03
    • 2021-10-11
    • 1970-01-01
    • 2018-09-23
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多