我遇到的问题如下
我有一个包含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]中抽取一个随机样本,首先是概率分布[0.8,0.1,0.1],然后是概率分布[0.3,0.3,0.4],这样就给予了两个输出。
=====更新=====
我可以使用for循环或列表解析,但我正在寻找一个快速/矢量化的解决方案。
2条答案
按热度按时间qeeaahzv1#
有一个办法。
下面是概率的数组:
c
保存累积分布:生成一组均匀分布的样本...
...然后查看它们在
c
中的"位置":mec1mxoz2#
这个问题已经很老了,但是基于这个问题可能有一个稍微优雅一点的解决方案:https://numpy.org/doc/stable/reference/random/generated/numpy.random.Generator.multinomial.html
(我修改了原始输入以用作DataFrame)。