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

标签 python numpy

我遇到的问题如下

我有一个包含 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 循环或列表理解,但我正在寻找一种快速/矢量化的解决方案。

最佳答案

这是一种方法。

这是概率数组:

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])

关于python - 如何将 numpy random.choice 应用于概率值矩阵(矢量化解决方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40474436/

相关文章:

python - 全局名称 'sqrt' 未定义

python - 属性错误: 'DataFrame' object has no attribute 'dtype' error in pyspark

python - Flask - WTForm - 将表单数据获取为 NoneType 而不是 String

python - 如何通过 Python 中的最后一个字符过滤列

python - 让 NumPy 在逻辑索引后返回正确形状的数组而不进行 reshape 的简洁方法?

python - 迭代定义的 Numpy 数组创建

python - 在 Python 列表中压缩列表

python - 在 amazon ec2 上配置主管,给出生成错误未知错误,为 'app_name' : EACCES 制作调度程序

python - scipy 中的线性插值

python - Python 中的多维欧氏距离