如何将numpy random.choice应用于概率值矩阵(矢量化解决方案)

发布于 2021-01-29 16:52:31

我的问题如下

我有一个带有3个值的一维整数列表(或np.array)

l = [0,1,2]

我有一个二维列表(为简单起见,我们将使用两行)

P = 
[[0.8, 0.1, 0.1],
 [0.3, 0.3, 0.4]]

我想要的是numpy.random.choice(a=l, p=P),其中P(概率分布)中的每一行都应用于l。因此,我希望从带有概率的[0,1,2]中抽取一个随机样本。dist。[0.8,0.1,0.1]首先,然后是概率。dist。[0.3,0.3,0.4]接下来,给我两个输出。

=====更新======

我可以用于循环或列表理解,但是我正在寻找一种快速/矢量化的解决方案。

关注者
0
被浏览
56
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一种方法。

    这是几率:

    In [161]: p
    Out[161]: 
    array([[ 0.8 ,  0.1 ,  0.1 ],
           [ 0.3 ,  0.3 ,  0.4 ],
           [ 0.25,  0.5 ,  0.25]])
    

    c 持有累积分布:

    In [162]: c = p.cumsum(axis=1)
    

    生成一组均匀分布的样本…

    In [163]: u = np.random.rand(len(c), 1)
    

    …然后查看它们“适合”的位置c

    In [164]: choices = (u < c).argmax(axis=1)
    
    In [165]: choices
    Out[165]: array([1, 2, 2])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看