Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:快速确定每行的k最近邻,其他元素设置为零并对其进行规格化_R_Data.table - Fatal编程技术网

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