【问题标题】:How can I write an arbitrary discrete distribution in Julia?如何在 Julia 中编写任意离散分布?
【发布时间】:2018-01-11 17:36:40
【问题描述】:

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

【问题讨论】:

  • 您可以简单地使用 Julia 的rand() 来实现这一点。像myDist() = ifelse(rand() < 0.3, 1.0, 1.1) 这样的东西应该可以工作。当然你可以泛化函数来接受不同的值和不同的概率。

标签: julia


【解决方案1】:

也许您不需要完整的分布类型,但只需从这样的分布中采样就足够了?

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

using StatsBase  # corrected a typo here

values = [1.0, 1.1]
probabilities = [0.3, 0.7]
w = Weights(probabilities)
sample(values, w) # sampling

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

using Distributions

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

d = Categorical(probabilities)
values[rand(d)] # sampling

但是会慢一点。

如果您想按照 Distributions 包类型系统定义自己的发行版,最简单的方法是获取此代码 https://github.com/JuliaStats/Distributions.jl/blob/master/src/univariate/discrete/categorical.jl 并根据您的需要对其进行修改(但我会说这将是一项重大的努力)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢。我想我只是不知道从哪里开始……有什么建议吗?
    • 作为一个更新,看起来这是在那年晚些时候合并的,尽管从线程中他们似乎仍然没有决定将名称保留为DiscreteNonParametric
    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多