代码之家  ›  专栏  ›  技术社区  ›  Mohan

是否有一种更快的方法来编写代码,从1:N中提取许多随机样本?

  •  2
  • Mohan  · 技术社区  · 10 月前

    我正在从中绘制许多大小为k(通常为~5)的排序样本 1:35 。我使用的代码是:

    replicate(1000000, sort(sample(1:35, size = 5)) )
    

    但这相当缓慢。我假设既然我在使用 replicate ,没有发生平行化。有没有更快的方法来编写这段代码?

    1 回复  |  直到 10 月前
        1
  •  2
  •   Friede    10 月前

    TTBOMK, replicate 是包装 sapply ,它本身就是一个包装 lapply 有很多选择;简单的可能是:

     library(future.apply)
    #> Loading required package: future
     plan(multisession, workers = 6L)
     i = seq(35L)
     system.time({ X = future_replicate(1e6, sample(i, 5L, replace = TRUE)) |> t() })
    #>    user  system elapsed 
    #>   3.122   0.141   4.619
     head(X)
    #>      [,1] [,2] [,3] [,4] [,5]
    #> [1,]   26   18   31    9   35
    #> [2,]   25   10   10   24   16
    #> [3,]    9    9   35    4   25
    #> [4,]   27   32   26   15   27
    #> [5,]   13    2    6   26   24
    #> [6,]   26   23   12    7   26
     library(Rfast)
     rowSort(head(X))
    #>      [,1] [,2] [,3] [,4] [,5]
    #> [1,]    9   18   26   31   35
    #> [2,]   10   10   16   24   25
    #> [3,]    4    9    9   25   35
    #> [4,]   15   26   27   27   32
    #> [5,]    2    6   13   24   26
    #> [6,]    7   12   23   26   26
    
    推荐文章