我想为each row
矩阵确定k最近邻,这是我的代码,我认为data.table可以更有效率,但目前,我无法弄明白
mm <- matrix(c(5, 1, 2, 3, 5, 4), 3, 2)
mm <- tcrossprod(mm)
getNearest <- function(simmat, k = 2) {
res <- apply(simmat, 1, function(x) {
s <- sort(x, index.return = TRUE)
x[s$ix[1:(length(x) - k)]] <- 0
return(x)
}
)
return(res / rowSums(res))
}
getNearest(mm, k = 2)
> getNearest(mm, k = 2)
[,1] [,2] [,3]
[1,] 0.6071429 0.0000000 0.3928571
[2,] 0.0000000 0.5416667 0.4583333
[3,] 0.5000000 0.5000000 0.0000000
原来的mm是:
> mm
[,1] [,2] [,3]
[1,] 34 20 22
[2,] 20 26 22
[3,] 22 22 20
对于2000乘2000矩阵和k = 30,它将花费1.17秒,是否有更有效的方法来完成相同的事情,在data.table
?
感谢。