我试着为elements
中的每个元素做一个选择,然后我将elements
列表中的元素与它的优先选择(一,二或三)配对。选择主要是根据元素的概率(weights
)来完成的。
from numpy.random import choice
elements = ['one', 'two', 'three']
weights = [0.2, 0.3, 0.5]
chosenones= []
for el in elements:
chosenones.append(choice(elements,p=weights))
tuples = list(zip(elements,chosenones))
产量:
[('one', 'two'), ('two', 'two'), ('three', 'two')]
我需要的是,每个元素做两个选择,而不是一个。
预期输出应如下所示:
[('one', 'two'), ('one', 'one'), ('two', 'two'),('two', 'three'), ('three', 'two'), ('three', 'one')]
你知道怎么输出这个吗?
2条答案
按热度按时间wztqucjr1#
如果需要两个值,只需告诉
numpy.random.choice()
选择两个值;循环时将el
值作为元组包含进来(不需要使用zip()
):或者通过使用列表解析:
通过设置
replace=False
,可以获得唯一值;请将其删除或显式设置为True
以允许重复。请参阅numpy.random.choice()
文档:大小:* 整数或整数元组,可选 *
输出形状。如果给定的形状为
(m, n, k)
,则绘制m * n * k
样本。默认值为None
,在这种情况下返回单个值。替换:* 布尔值,可选 *
样品是否更换
演示:
mpgws1up2#
如果您接受副本,
random.choices
将执行以下操作:随机选择(总体,权重=无,*,累积权重=无,k=1)
返回从具有替换的填充中选择的k大小的元素列表。如果填充为空,则引发IndexError。
如果指定了权重序列,则根据相对权重进行选择。