r - 在 R 中创建距离矩阵(不使用 dist())

标签 r matrix distance

我需要从矩阵创建一个距离矩阵,它返回列之间的距离。

我知道它存在一个名为 dist() 的函数,但我不能使用它,因为我将使用不常见的距离函数。

本来想用apply,但是不知道怎么写。

我创建的循环是:

 dista <- function(A,distance){
  dist_matrix=matrix(0,dim(A)[2],dim(A)[2])
  for (i in 1:(dim(A)[2]-1)){
    for(j in (i+1):(dim(A)[2])){
      if(distance=='cosine') dist_matrix[j,i]<- (1-sum(A[,i]*A[,j]))/(sqrt(sum(A[,i]^2))+sqrt(sum(A[,j]^2)))
    }
  }
  dist_matrix
}

最佳答案

假设您有这样的数据框:

df <- data.frame(x = rnorm(10, 5, 1), y = rnorm(10))

您可以按如下方式使用申请:

apply(df, 1, dist)

要使用客户距离函数,您可以将上面对 dist 的调用替换为:

apply(df, 1, my_own_dist)

当然,这会遍历每一行数据,但仍然比基于矩阵的计算要慢。了解距离函数的实际作用可能会帮助人们以更有效的方式解决问题。

根据以下评论进行编辑....

如果您尝试计算原始矩阵 A 中每对列之间的成对距离,您可以尝试如下操作:

apply(combn(1:ncol(A), 2), 2, function(x) my_dist_function(A[, x]))

首先生成所有唯一的列对,一次一个地遍历它们

关于r - 在 R 中创建距离矩阵(不使用 dist()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37949796/

相关文章:

r - 在 R 中绘图时图例消失

python - 将属性和目标矩阵用于 TensorFlow 线性回归 Python

c++ - 如何制作参数构造函数来初始化通向方矩阵的行和列?

c++ - 如何确保迭代器不会越过 end()?

r - 打印重要的自相关值

r - 使用位置 ="dodge"时,ggplot 未正确分组条形图

r - 如何从绘制的线性模型中获取更平滑的参数?

r - 获取矩阵每一行中最大值的列索引

mysql - 在特定时间间隔的随机结果(根据列数据)

r - 按组计算连续行之间的距离