如何将numpy random.choice应用于概率值矩阵(矢量化解决方案)
我的问题如下
我有一个带有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]接下来,给我两个输出。
=====更新======
我可以用于循环或列表理解,但是我正在寻找一种快速/矢量化的解决方案。
-
这是一种方法。
这是几率:
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])