python - 在 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]))
解决方案
您只需要绘制您的数字并将它们与您的 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]
推荐阅读
- python - Python:在非结构化 JSON 中将“华盛顿”的所有实例更改为“哥伦比亚特区”
- c# - 您可以将凭据添加到 .Net 中的现有 HttpClient 对象吗
- javascript - 警告:validateDOMNesting(...):
- r - 不同行中匹配配对 id 上的向量
- asp.net-mvc - ADFS 身份验证 MVC Web API
- java - PriorityQueue 和 LinkedList Java
- ms-access - 带有嵌套 IIF 语句的文本框控件源无论如何都返回相同的列
- coldfusion - Coldfusion 2016 API Manager 安装问题 - 无法查看管理员
- algorithm - 将一个数分成不同部分的最小数
- arrays - 我的程序不会打印数组中第一个和最后一个数字的总和