如何在Julia中编写任意离散分布?

Ben*_* S. 4 julia

例如,以概率0.3返回1.0并以概率0.7返回1.1的分布.谢谢.

Bog*_*ski 6

也许你不需要一个完整的分布类型,但只是从这样的分布采样就足够了吗?

如果是这种情况,那么最简单的方法是:

using StatsBase  # corrected a typo here

values = [1.0, 1.1]
probabilities = [0.3, 0.7]
w = Weights(probabilities)
sample(values, w) # sampling
Run Code Online (Sandbox Code Playgroud)

如果你真的想要使用一个发行版,你现在可以得到的最接近的东西是:

using Distributions

values = [1.0, 1.1]
probabilities = [0.3, 0.7]

d = Categorical(probabilities)
values[rand(d)] # sampling
Run Code Online (Sandbox Code Playgroud)

但它会慢一点.

如果您想在分发包类型系统之后定义您自己的发行版,最简单的方法是使用此代码https://github.com/JuliaStats/Distributions.jl/blob/master/src/univariate/discrete/categorical.jl和根据你的需要修改它(但这将是我所说的一项重大努力).


Sim*_*rne 5

目前还没有内置的方法可以做到这一点,但您可以查看https://github.com/JuliaStats/Distributions.jl/pull/634)。