给定概率的向量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
答案 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