【问题标题】:Split-normal distribution分裂正态分布
【发布时间】:2019-06-23 20:30:31
【问题描述】:

在给定具有上下误差的平均值的情况下,计算分裂正态分布的最佳方法是什么?

到目前为止,我有:

from random import choice, gauss
def random_split_normal(mu: float, upper_sigma: float, lower_sigma:int) -> float:
    return abs(gauss(0.0, 1.0)) * choice([upper_sigma, -lower_sigma]) + mu

我多次调用它来生成一个数组:

random_array = []
for _ in range(1000):
    random_array.append(random_split_normal(1.0, 2.0, 1.0))

在制作random_array 的直方图时会产生以下结果:

我想知道随机使用upper_sigmalower_sigma 是否是正确的方法?

【问题讨论】:

    标签: python python-3.x statistics gaussian


    【解决方案1】:

    您的解决方案在数学上是等效的,但效率较低,因为您不必要地应用 abs() 和 choice(),您可以只查看 gauss() 的符号。

    这应该接近定义。我还重新调整了 sigma 以符合我们通常的数字线方向(左侧为负无穷大)

    def random_split_normal(mu: float, lower_sigma: float, upper_sigma: float) -> float:
        z = gauss(0, 1)
        return mu + z * (lower_sigma if z < 0 else upper_sigma)
    

    【讨论】:

    • 感谢您的回答。我喜欢颠倒 sigma 值的顺序,就像我通常说的“答案是 x 加减 y”。但这只是我!
    • 这很合理。感谢您的编辑建议!
    • @AlexJ.R.Lewis 我认为 normal(0, 1) 不起作用,所以我改回来了。还删除了返回中的一些重复项。
    • @AlexJ.R.Lewis 如果您觉得它有帮助,请考虑接受这个答案:)
    猜你喜欢
    • 2013-04-10
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2015-08-22
    • 2011-06-07
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    相关资源
    最近更新 更多