我想从一组选项中选择多个项目。每个选项都有自己的一组被选中或未被选中的概率。你知道吗
福克斯示例:
选择,“是”、“否”
“九月”,0.90,0.10
“十月”,0.25,0.75
“十一月”,0.45,0.55
“十二月”,0.50,0.50
“是”表示被选中,“否”表示未选中。因此,对于第一卷,可以选择[“九月”、“十二月”],对于第二卷,可以选择[“九月”、“十月”、“十一月”]等等。你知道吗
它类似于复选框选项,其中选择或不选择一个选项独立于其他选项。你知道吗
我能挺过去numpy.random.choice选项通过循环进入每一个给定的选择。但我想知道有没有更优雅/有效的方法?你知道吗
我就是这么做的
choices = {
"September":0.90,
"October":0.25,
"November":0.45,
"December":0.50
}
resp = []
for ch, pr in choices:
pick = 1
probs = [pr, 1-pr]
select = ["yes", "no"]
choose = numpy.random.choice(select, pick, probs)
if "yes" in choose[0]:
resp.append(ch)
谢谢。你知道吗
您可以使用
numpy.random.uniform
函数来生成间隔[0,1]
中的样本。通过将这些概率与choices
中的概率进行比较,可以创建具有指定概率的随机样本。由于自动广播,每一列都与choices
对应的概率相比较。你知道吗这样,您就可以创建一个维度为
(n_rolls, n_choices)
的矩阵,其中n_rolls
是您希望重复此操作的次数(如果您只需要一个样本,则可以是1
),而n_choices
是不同选择的次数。你知道吗结果将是一个bool数组,其中每列对应于
choices
中的一个选项,每行包含一个try。由于我们使用了OrderedDict
,结果的排序方式将与您输入字典数据的方式相同。你知道吗作为测试:让我们找出
n_rolls=1000000
每列的概率:要将此结果转换为指定的列表,可以使用
numpy.where
和numpy.choose
的组合:不幸的是,这个部分只适用于一行,所以如果您有多个转鼓,您需要在循环中完成最后一步。你知道吗
相关问题 更多 >
编程相关推荐