R:快速确定每行的k最近邻,其他元素设置为零并对其进行规格化
我想为R:快速确定每行的k最近邻,其他元素设置为零并对其进行规格化,r,data.table,R,Data.table,我想为每一行一个矩阵确定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.ret
每一行
一个矩阵确定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
对于2000x2000矩阵和k=30,它将花费1.17秒,是否有更有效的方法来完成同样的事情,在数据表中
谢谢。
有可能考虑的K近邻的包和函数。您可能还希望显示data.table解决方案的最佳猜测。
> mm
[,1] [,2] [,3]
[1,] 34 20 22
[2,] 20 26 22
[3,] 22 22 20