R中以knn为单位的实现距离矩阵

问题描述 投票:0回答:1

我想计算R中的距离矩阵(使用欧几里得距离)

我知道如何在for循环中执行此操作

但是我该如何使用家庭功能?

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()
  }

}
r matrix apply knn
1个回答
1
投票

对于mapplyexpand.grid的所有组合考虑MN

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

0
投票

对于mapplyexpand.grid的所有组合考虑MN

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
© www.soinside.com 2019 - 2024. All rights reserved.