Реализовать матрицу расстояний в кнн в R - PullRequest
0 голосов
/ 26 марта 2020

я хочу вычислить матрицу расстояний в R (используя евклидово расстояние)

я знаю, как это сделать для l oop

, но как я могу это сделать, применяя семейство функция?

require(magrittr)

data(iris)

set.seed(1)
data <- iris[sample(nrow(iris))   ,] # 打散資料
Xtrain <- data[1:100,1:4]
Xtest <- data[101:150,1:4]

M <- nrow(Xtrain)
N <- nrow(Xtest)

distmatrix <- matrix(0,nrow = M,ncol = N)

for(i in 1:M){
  for(j in 1:N){
    distmatrix[i,j]<- sum((Xtrain[i,]-Xtest[j,])^2) %>% sqrt()
  }

}

1 Ответ

1 голос
/ 26 марта 2020

Рассмотрим mapply с expand.grid для всех комбинаций M и N:

params <- expand.grid(M=seq(M), N=seq(N))

distmatrix2 <- matrix(mapply(function(i,j) sqrt(sum((Xtrain[i,]-Xtest[j,])^2)), 
                      params$M, params$N),
                      nrow = M, ncol = N)

# EQUIVALENT TO OP's distance 
identical(distmatrix, distmatrix2)
# TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...