生成随机布尔向量的最快方法

时间:2015-10-01 11:38:16

标签: r random

给定概率的向量p,生成与x长度相同且具有p的独立元素的随机布尔向量x[i]==TRUE的快速方法是什么?每个p[i]概率为i

具体来说,有没有比这些更快的方式?:

p <- rep(0.5,10e6)

system.time(runif(length(p)) < p)
   user  system elapsed 
   0.36    0.02    0.37 

system.time(rbinom(length(p),1,p)>0)
   user  system elapsed 
   1.14    0.04    1.17 

2 个答案:

答案 0 :(得分:8)

在我的机器上使用sample功能更快:

system.time(runif(length(p)) < p)
    user  system elapsed 
    0.315   0.002   0.318 
system.time(sample(c(TRUE,FALSE), 10e6, TRUE))
    user  system elapsed 
    0.2     0.0     0.2 

答案 1 :(得分:1)

p <- rep(0.5,10e6)
microbenchmark(runif(length(p)) < p,
               sample.int(n=10,size=length(p),replace=TRUE) < p*10+1,
               times=10)

给出以下结果

expr                   min       lq     mean   median       uq      max neval
runif(length(p)) < p   465.7474 467.6487 477.6264 469.5444 477.7114 541.8130    10
sample.int(n = 10,     266.1194 268.7164 311.0995 307.0160 333.6954 418.2309    10

对于低概率p,您可能希望更改为10函数和sample的{​​{1}}更大的整数。

让我们检查两个函数是否给出相同的结果

p*10+1