簡體   English   中英

在R中創建距離矩陣(不使用dist())

[英]create a distance matrix in R (without using dist())

我需要從一個矩陣創建一個距離矩陣,該矩陣返回列之間的距離。

我知道它存在一個名為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:

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]))

首先生成所有唯一列對,然后一次遍歷它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM