我有一个方法,使用随机包生成一个具有一定概率的列表,例如:
import random
seed = 30
rand = random.Random(seed)
options_list = [1, 2, 3, 4, 5, 6]
prob_weights = [0.1, 0.2, 0.1, 0.05, 0.02, 0.06]
result = rand.choices(option_list, prob_weights, k=4) # k will be <= len(option_list)
我的问题是result
可以容纳两个相同的项目,我希望它是独一无二的。
我可以让k
param更大,然后过滤掉独特的项目,但这似乎是错误的方法。我查看了文档,我没有看到选择函数获得这种参数。
任何想法如何配置随机返回一个独特的项目列表?
您可以使用np.random.choice
,它允许您分配与每个条目关联的概率,也可以生成随机样本而无需替换。然而,概率必须加起来,你必须将矢量除以它的L^1-Norm
。所以这是你如何做到的:
import numpy as np
options_list = np.array([1, 2, 3, 4, 5, 6])
prob_weights = np.array([0.1, 0.2, 0.1, 0.05, 0.02, 0.06])
prob_weights_scaled = prob_weights / sum(prob_weights)
some_length = 4
np.random.choice(a=options_list, size=some_length, replace=False, p=prob_weights_scaled)
产量
array([2, 1, 6, 3])