【发布时间】:2021-03-04 01:42:22
【问题描述】:
我想从discrete distribution 中反复采样以获得一个数字。
以下是一些实现我正在寻找的代码:
const probabilities = [0.3, 0.3, 0.2, 0.15, 0.05]
const cummulative_probabilities = cumsum(probabilities)
function pickone(cummulative_probabilities)
n = length(cummulative_probabilities)
i = 1
r = rand()
while r >= cummulative_probabilities[i] && i<n
i+=1
end
return i
end
for i in 1:20
println(pickone(cummulative_probabilities))
end
使用Distributions 的建议替代方案并没有削减它,因为我能得到的最接近的是以下代码:
using Random
using Distributions
const probabilities = [0.3, 0.3, 0.2, 0.15, 0.05]
mnd = Multinomial(1, probabilities)
for i in 1:20
println(rand(mnd))
end
唉,在这种情况下,rand 返回一个带有单个 1 的整个向量,其余的都是零。
【问题讨论】:
-
二项分布计算当试验独立且成功概率固定时,n 次试验中发生的“成功”次数。没有成功是一种可能性。由于您的算法从不生成零,因此它不会生成二项分布。
-
@pjs 我的意思是多项式抽签。有人公正地纠正了标题。
标签: julia distribution multinomial