簡體   English   中英

在 python 中按順序生成均勻分布的隨機數 (X1,X2,X3)

[英]Generating random number sequentially (X1,X2,X3) with uniform distribution in python

我需要按如下方式生成 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() function:

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) 隨機變量的順序統計信息,那么您提出的 3 步生成方法將不具有正確的分布屬性。 使用您提出的算法,X1、X2 和 X3 的期望值分別為 0.5、0.25 和 0.25。 至於這三個中哪個是最大值,哪個是最小值,這是一個折騰。

如果您對合法訂單統計感興趣,可以通過取生成的統一值的第k根來生成k個獨立統一的最大值。 下一個可以取第 ( k - 1)根,在 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))

無論N是什么,它都會為兩次檢查打印True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM