从Random.choices函数中获取唯一项的列表

问题描述 投票:1回答:1

我有一个方法,使用随机包生成一个具有一定概率的列表,例如:

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更大,然后过滤掉独特的项目,但这似乎是错误的方法。我查看了文档,我没有看到选择函数获得这种参数。

任何想法如何配置随机返回一个独特的项目列表?

python random
1个回答
2
投票

您可以使用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])
© www.soinside.com 2019 - 2024. All rights reserved.