gpt4 book ai didi

r - 有效地生成离散随机数

转载 作者:行者123 更新时间:2023-12-04 09:07:13 24 4
gpt4 key购买 nike

我想在已知 CDF 的情况下快速生成离散随机数。本质上,算法是:

  1. 构造 CDF 向量(从 0 开始到 1 结束的递增向量)cdf
  2. 生成一个统一的(0, 1)随机数u
    • 如果 u < cdf[1]选择 1
    • 否则,如果 u < cdf[2]选择2
    • 否则,如果 u < cdf[3]选择 3*...

示例

首先生成一个cdf:

cdf = cumsum(runif(10000, 0, 0.1))
cdf = cdf/max(cdf)

接下来生成N统一随机数:

N = 1000
u = runif(N)

现在对值进行采样:

##With some experimenting this seemed to be very quick
##However, with N = 100000 we run out of memory
##N = 10^6 would be a reasonable maximum to cope with
colSums(sapply(u, ">", cdf))

最佳答案

如果你知道概率质量函数(如果你知道累积分布函数,你会这样做),你可以使用 R 的内置 sample 函数,你可以在其中定义离散事件的概率带参数 prob.

cdf = cumsum(runif(10000, 0, 0.1))
cdf = cdf/max(cdf)

system.time(sample(size=1e6,x=1:10000,prob=c(cdf[1],diff(cdf)),replace=TRUE))
user system elapsed
0.01 0.00 0.02

关于r - 有效地生成离散随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15137459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com