【问题标题】:Get a set three random variable follow uniform distribution from 0 to 1 in which X1+X2+X3=1 [duplicate]获得一组三个随机变量,遵循从 0 到 1 的均匀分布,其中 X1+X2+X3=1 [重复]
【发布时间】:2021-02-24 22:10:29
【问题描述】:

我的方法

N=20
X1 = np.zeros((N,))
X2 = np.zeros((N,))
X3 = np.zeros((N,))
for i in range(N):
    while (X1[i]+X2[i]+X3[i]>1+sys.float_info.epsilon) or (X1[i]+X2[i]+X3[i]<1-sys.float_info.epsilon):
        X1[i]= np.random.random()
        X2[i]= np.random.random()
        X3[i]= np.random.random()

这是行不通的,因为计算机程序会运行很长时间。有什么聪明的方法吗?

【问题讨论】:

  • 因为它要求 X1 X2 X3 从 0 到 1 均匀分布
  • 很确定这在数学上对于 n>2 是不可能的。即使使用您展示的方法,您的拒绝抽样也会使最终分布不均​​匀。

标签: python numpy math


【解决方案1】:

您不能对所有 3 个变量进行均匀分布。

在任何有效的三元组中,至少 2/3 的变量必须小于 1/2。如果您希望所有变量具有相同的分布,则平均密度 = 1/2 的两倍。

获得3个变量总和为1的一种特别好的方法是在单位球面上选择一个随机点,然后使用x2, y2, z2.

令人惊讶的是,在单位球面上选择一个点非常简单。如果选择均匀分布的高度和均匀分布的经度,则结果将均匀分布在表面上。

如果您以这种方式选择 3 个变量,那么它们的平方根将均匀分布。 70% 的值将是

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 2015-06-04
    • 2016-01-21
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多