下面给了我的方法和你的方法,结果的矩阵都是第m行第n列的数值=a的第n行和b的第m行的距离
- mydist <- function(a, b) {
- apply(a, 1, function(vec, mat) {
- apply(mat, 1, function(x){
- dist(rbind(x, vec))
- })
- }, mat = b)
- }
- yourdist <- function(a, b) {
- result <- matrix(NA, nrow = nrow(b), ncol = nrow(a))
- for (i in 1:nrow(a))
- for (j in 1:nrow(b))
- result[j, i] <- dist(rbind(a[i, ], b[j, ]))
- return(result)
- }
复制代码推荐mydist,速度应该能快10倍左右
- > n <- 100
- > a <- data.frame(x = runif(n), y = runif(n))
- > b <- data.frame(x = runif(n), y = runif(n))
- > system.time(mydist(a, b))
- 用户 系统 流逝
- 0.25 0.00 0.25
- > system.time(yourdist(a, b))
- 用户 系统 流逝
- 3.34 0.00 3.50
复制代码