python - split 正态分布

标签 python python-3.x statistics gaussian

给定具有上限和下限误差的平均值,计算分割正态分布的最佳方法是什么?

到目前为止我已经:

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 的直方图时会产生以下结果:

enter image description here

我想知道随机使用 upper_sigmalower_sigma 是否是执行此操作的正确方法?

最佳答案

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

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

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)

关于python - split 正态分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54442632/

相关文章:

python-3.x - 8.7版本错误: No Module Named 'psycopg2.__psycopg' in AWS Lambda with python 3.

r - 未知累积函数的反函数

python - Pandas groupby然后选择一行

python - 在 3D 空间中插值标量场

python - 比较和排序数组

python - 无模式对话框 tkinter

python-3.x - 使用pytest-mock在python中使用SQLalchemy模拟数据库调用

python - DataFrame 无法通过 : getting following error: tuple indices must be integers or slices, 而不是 str 进行迭代

python - sklearn Standardscaler() 可以影响测试矩阵结果

java - Java 中的 Arima/Arma 时间序列模型