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我指的是一次绘制的多项式。有人公正地更正了标题。