【问题标题】:Sampling from two Gaussian distributions with different probability in Python在Python中从两个具有不同概率的高斯分布中采样
【发布时间】:2021-12-21 11:42:40
【问题描述】:

我试图从 2 个不同的高斯分布中生成 100 个样本,这样 G1 以 0.7 的概率出现,G2 以 0.3 的概率出现。我有以下代码sn-p:

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'

我有什么遗漏吗?或者,是否存在根本缺陷?

【问题讨论】:

    标签: python probability gaussian


    【解决方案1】:

    在这一行

    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]
    

    【讨论】:

    • 谢谢!抱歉,我必须事先提到这一点:我希望每个分布的绘制大小为 5。也就是说,我想要 100 个样本,其中每个样本属于 G1 或 G2,并且大小为 5。这就是我感到困惑的地方。
    • 我的错!我得到了它!谢谢 - 我已经接受了你的回答。
    • @Nanda 好吧,那么您可以使用[x[i].rvs(5) for i in draw] 来获得一个 5 x 100 的 numpy 数组。
    • 是的,我意识到了这一点。匆忙中,我错过了向 rvs() 提供 5 个。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 2012-04-14
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 2017-02-11
    相关资源
    最近更新 更多