在 R 中制作加权随机布尔值的快速方法
Quick way to make weighted random boolean in R
好的,所以我需要根据我事先计算的先验概率生成一个随机布尔值。目前我正在做这样的事情:
sample(0:1,1,replace=T, c( 0.6, 0.4))
这当然很好用,问题是我需要这样做数百万次(基于每次不同的权重 - 0.6、0.4 简单的例子)。当然,我已经将它包装在 sapply 中并将其并行化并且它可以工作,但我可能需要将其增加到数千万或更多,我想知道是否有比 [=11 更快的生成加权随机布尔值的方法=]命令
您正在从二项分布中抽样,执行此操作的内置函数是 rbinom()
。
以下是创建简单示例的方法:
rbinom(n=10, size=1, prob = c( 0.6, 0.4))
[1] 0 1 0 0 0 1 1 1 1 1
时间安排:
> system.time({
+ x <- rbinom(n=2.5e6, size=1, prob = c( 0.6, 0.4))
+ })
user system elapsed
0.17 0.00 0.17
> str(x)
int [1:2500000] 1 0 1 1 1 0 1 0 0 1 ...
好的,所以我需要根据我事先计算的先验概率生成一个随机布尔值。目前我正在做这样的事情:
sample(0:1,1,replace=T, c( 0.6, 0.4))
这当然很好用,问题是我需要这样做数百万次(基于每次不同的权重 - 0.6、0.4 简单的例子)。当然,我已经将它包装在 sapply 中并将其并行化并且它可以工作,但我可能需要将其增加到数千万或更多,我想知道是否有比 [=11 更快的生成加权随机布尔值的方法=]命令
您正在从二项分布中抽样,执行此操作的内置函数是 rbinom()
。
以下是创建简单示例的方法:
rbinom(n=10, size=1, prob = c( 0.6, 0.4))
[1] 0 1 0 0 0 1 1 1 1 1
时间安排:
> system.time({
+ x <- rbinom(n=2.5e6, size=1, prob = c( 0.6, 0.4))
+ })
user system elapsed
0.17 0.00 0.17
> str(x)
int [1:2500000] 1 0 1 1 1 0 1 0 0 1 ...