微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python中以均匀分布顺序生成随机数X1,X2,X3

如何解决在python中以均匀分布顺序生成随机数X1,X2,X3

我需要按如下方式生成 X1、X2 和 X3:

  1. 样本 X1 ~ U(0,1)
  2. 样本 X2 ~ U(0,1-X1)
  3. 设置 X3 = 1- X1- X2。

我正在尝试编码为:

N = 100
    
X1 = np.random.rand(N)
X2 = X1 - np.random.rand(N)
X3 = 1-X1-X2

但它为 X2 返回 -(ve) 值。如何根据条件获得 (+)ve 个值。

解决方法

几个选项:

使用 random.uniform() 函数:

X1 = random.uniform(0,1)
X2 = random.uniform(0,1 - X1)
X3 = 1 - X1 - X2

注意:如果这是针对您可能有动机的对手的任何事情,请使用 secrets 模块而不是 random

编辑:现在我更仔细地阅读了,您需要一个包含 100 个样本的数组;为此,您必须手动将 U(0,1) 变量缩放为 U(0,1-X1):

X1 = np.random.rand(N)
X2 = np.random.rand(N) * (1 - X1)
X3 = 1 - X1 - X2
,

np.random.rand(N)U(0,1)

生成

当您执行 X1 - np.random.rand(N) 时,您从 X1 - U(0,1) 生成而不是从 U(0,1-X1) 生成,这就是 X2 为负值的原因

解决办法: 重新调整 X2 答案:X2 = np.random.rand(N) * (1. - X1)

,

如果您实际上是在为三个独立的 U(0,1) 随机变量寻找 order statistics,那么您建议的 3 步生成方法将不具有正确的分布特性。对于您提出的算法,X1、X2 和 X3 的预期值分别为 0.5、0.25 和 0.25。三个中哪个是最大值,哪个是最小值,这是一个折腾。

如果您对合法订单统计感兴趣,可以通过取 kth 个根来生成 k 个独立制服的最大值生成的统一值。下一个可以取 (k - 1)th 根在 0 和最大值之间缩放,依此类推。这将使 k = 3 的算法如下:

import numpy as np

N = 100

X3 = np.random.uniform(size = N) ** (1/3)
X2 = np.sqrt(np.random.uniform(size = N)) * X3
X1 = np.random.uniform(size = N) * X2

请注意,我已将 X 重命名为使用标准订单统计符号,其中 X1 表示最小值,X2 是中位数(对于 k = 3),X3 是最大值。该算法保证正确排序,X1、X2 和 X3 的预期值分别为 0.25、0.5 和 0.75,因此它们联合正确划分了 U(0,1) 区间。可以通过以下方式轻松确认订单的保留:

print(all(X1 <= X2))
print(all(X2 <= X3))

无论True如何,都会为两个支票打印N

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。