Julia中离散分布的采样

Julia中离散分布的采样,julia,distribution,multinomial,Julia,Distribution,Multinomial,我想重复从一个样品,以便得到一个单一的数字 以下是一些实现我所寻找的功能的代码: const概率=[0.3,0.3,0.2,0.15,0.05] 常数累积概率=累积(概率) 函数pickone(累积概率) n=长度(累积概率) i=1 r=rand() 当r>=累积概率[i]&&i时,您似乎在寻找加权抽样,这是通过StatsBase.jl中的sample实现的: julia> using StatsBase julia> using FreqTables julia>

我想重复从一个样品,以便得到一个单一的数字

以下是一些实现我所寻找的功能的代码:

const概率=[0.3,0.3,0.2,0.15,0.05]
常数累积概率=累积(概率)
函数pickone(累积概率)
n=长度(累积概率)
i=1
r=rand()

当r>=累积概率[i]&&i时,您似乎在寻找加权抽样,这是通过StatsBase.jl中的
sample
实现的:

julia> using StatsBase

julia> using FreqTables

julia> 

julia> proptable([pickone(cummulative_probabilities) for _ in 1:10^7])
5-element Named Array{Float64,1}
Dim1  │ 
──────┼──────────
1     │  0.300094
2     │       0.3
3     │  0.199871
4     │  0.150075
5     │ 0.0499595

julia> proptable([sample(Weights(probabilities)) for _ in 1:10^7])
5-element Named Array{Float64,1}
Dim1  │ 
──────┼──────────
1     │   0.29987
2     │  0.300086
3     │  0.199956
4     │  0.150184
5     │ 0.0499035

解决方案是使用加权概率抽样

如果尚未添加,则添加StatsBase包

Pkg.add("StatsBase")
抽取样本:

using StatsBase
const probabilities = [0.3, 0.3, 0.2, 0.15, 0.05]
items = [i for i in 1:length(probabilities)]
weights = Weights(probabilities)

for i in 1:20
    println(sample(items, weights))
end

我想出来了。但是非常感谢你教我关于支撑的知识!当试验是独立的且成功概率固定时,二项式分布统计n个试验中出现的“成功”次数。没有成功是一种可能性。因为您的算法从不生成零,所以它不会生成二项式分布。@pjs我指的是一次绘制的多项式。有人公正地更正了标题。