在 R 中的 knn 中实现距离矩阵
Implement distance matrix in knn in R
我想计算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()
}
}
对于 M
和 N
的所有组合,考虑 mapply
和 expand.grid
:
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
我想计算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()
}
}
对于 M
和 N
的所有组合,考虑 mapply
和 expand.grid
:
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