【问题标题】:Computing eucledian distance between vectors计算向量之间的欧式距离
【发布时间】:2018-01-06 16:22:12
【问题描述】:

我不明白 dist() 函数如何计算两个向量之间的欧几里得距离。我创建了最简单的一维向量,我想解释一下我得到的结果。这是一个名为 test.csv 的 CSV 文件中的向量:

Item Name   Attribute
Item 1      3
Item 2      5

代码如下:

test <- read.csv("test.csv", header = TRUE)
dist(test, method = "euclidean")

这是我得到的输出:

dist(test, method = "euclidean")
    1 2 2.828427
Warning message: In dist(test, method = "euclidean") : NAs introduced by coercion

R的版本是:Rx64 3.4.3

我希望结果是 2 而不是 2.828427,因为我假设欧几里得距离是通过以下公式计算的:d = sqrt((xi - yi)^2)

将 test.csv 文件中的数字代入我得到的公式中:

d = sqrt((3-5)^2) = 2

【问题讨论】:

  • 它没有计算c(3, 5) 的距离,请查看str(test) 的输出以查看传递给dist 的内容。
  • 我猜是您在将非数字数据传递给 dist 时遇到了该错误 - 请尝试从计算中省略第一列。
  • ps 如果您发布 dput(test) 的结果,我们更容易看到您的数据发生了什么。 ty

标签: r csv


【解决方案1】:

当您传递一个矩阵时,它会将您的输入视为n 乘以m 维向量,请参阅:

dist(t(df[,c("Name","Attribute")])) # distance between the two columns
dist(df[,c("Name","Attribute")]) # distance between the two rows

sqrt((1-3)^2 + (2-5)^2) # distance between the two columns
sqrt((1-2)^2 + (3-5)^2) # distance between the two rows

我认为这是你想要的:

apply(df[,c("Name","Attribute")],1, function(x) {abs(x[1]-x[2])})

【讨论】:

    猜你喜欢
    • 2014-06-14
    • 1970-01-01
    • 2021-02-11
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 2022-11-27
    • 2022-06-22
    • 2021-09-14
    相关资源
    最近更新 更多