首页 > 解决方案 > 在 Python 中模拟多个给定多个概率的最快方法?

问题描述

我有一个概率列表p = [p1, p2, …, pn]

我想要的只是模拟一个列表s = [0, 1, 0, 0, 1, …, 1],它的第一个元素是0概率p1,1 是概率1 - p1,然后对于下一个元素以此类推,始终匹配p-list 中的相应概率。

目前我的解决方案是for-loop结束p,然后附加到每个人调用s的输出。np.random.choice()pn

s = []
for item in p:
    s.append(np.random.choice([0, 1], p=[item, 1 - item]))

标签: pythonnumpy

解决方案


您只需要绘制您的数字并将它们与您的 p 进行逐元素比较。只是决定是否为1您想要>>=

import numpy as np

p = np.array([0.2, 0.5, 0, 1.0, 0.9, 0.3, 0.1, 0.8])
x = np.random.random(size=p.shape)
ans = (x>p).astype('int')

print(p)
print(x)
print(ans)


[0.2 0.5 0.  1.  0.9 0.3 0.1 0.8]
[0.08990063 0.51804083 0.9049705  0.0885368  0.1273564  0.18583925
 0.51488052 0.23258143]
[0 1 1 0 0 0 1 0]

推荐阅读