簡體   English   中英

在 Python 中從兩個不同概率的高斯分布中采樣

[英]Sampling from two Gaussian distributions with different probability in Python

我試圖從 2 個不同的高斯分布中生成 100 個樣本,這樣 G1 出現的概率為 0.7,G2 出現的概率為 0.3。 我有以下代碼片段:

from scipy.stats import norm
import numpy as np

x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]
z = np.array(y)

當我編譯這個時,我收到以下錯誤:

AttributeError: 'numpy.ndarray' object has no attribute 'rvs'

有什么我想念的嗎? 或者,是否存在根本性缺陷?

在這一行

x = [norm.rvs(0, 1, size=5), norm.rvs(10, 1, 5)]

您正在創建兩個隨機值數組。 所以在這一行

[x[i].rvs() for i in draw]

您不能使用它們來創建更多隨機值( .rvs ),因為您有 numpy 數組:

norm.rvs(0, 1, size=5)

# Out: array([-1.61758314,  1.19288111, -0.55599284, -0.17926848, -0.78759   ])

我想你想創建一個正態分布對象的列表,然后你用它來從中抽取隨機值:

x = [norm(0, 1), norm(10, 1)]
draw = np.random.choice([0, 1], 100, p=[0.7, 0.3])
y = [x[i].rvs() for i in draw]

暫無
暫無

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

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