r - 在R中的knn中实现距离矩阵
问题描述
我想计算 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()
}
}
解决方案
考虑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
推荐阅读
- kotlin - 如何在 Kotlin 中委派范围
- laravel - 在 Laravel 和 Vuejs 中创建每个记录的索引
- laravel - 将 CURL 获取请求转换为 guzzlehttp 客户端 Laravel
- php - MySQL GROUP BY 在 PDO 准备好的语句中不起作用
- javascript - React - Updating data in dispatch from useEffect
- python - wx.Python 杀死子线程
- php - 更改特定项目的 CLI PHP 版本
- python-3.6 - mlflow.exceptions.RestException:RESOURCE_DOES_NOT_EXIST:不存在 id=0 的实验
- php - 服务器上不同的 Google api 结果
- android - 升级应用内购买订阅android的问题(从服务器检索信息时出错。DF-DFERH-01)