如何在Python中选择独立加权的数字?

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

number=list(range(1,10))
weighted=[1]*2+[2]*2+[3]*2+[4]*2+[5]*2
number_weighted=random.choice(number,weighted,k=1)  **#if k=4 then the same number is chosen sometimes**

我想使用循环3次来选择每个数字。

我想选择独立的(不相同的)加权数字。

在python中,如果您知道这个问题,如果您教给我,我将不胜感激

例如,数字= [1,2,3,4,5]加权= [0.1,0.1,0.4,0.3,0.1]然后选择两个数字我想要3,4概率)但有时会选择1,1的random.choice函数。

所以,我认为我拿一个数字(假设数字3),然后数字= [1,2,4,5]加权= [0.1,0.1,0.3,0.1]我取一个数字(假设数字4)。使用循环功能

python pycharm anaconda
1个回答
0
投票

您的问题不太清楚,如果不能解决您的问题,请发表评论。定义函数,该函数从列表和权重中返回随机数。确保您拥有n个不同权重的随机数的另一项功能。

而且您的体重和阵列长度不同,我希望那是一个错误。

import random

def get_rand(num_list,weight_list,weight):
    selection_from= [i for i,v in enumerate(weight_list) if v==weight]
    print(selection_from)
    rand_index =random.choice(selection_from)
    return num_list[rand_index]

def get_n_rand(num_list,weight_list,n):
    weights= list(set(weight_list))
    random.shuffle(weights)
    final_list=[]
    # if you don't want numbers from same weight
    for weight in weights[:n]:
        final_list.append(get_rand(num_list,weight_list,weight))
    #if same weight is also fine use this:
    #for i in range(n):
    #    weight = random.choice(weights)
    #    final_list.append(get_rand(num_list,weight_list,weight))
    return final_list


number=list(range(1,10))
weighted=[1]*2+[2]*2+[3]*2+[4]*2+[5]*1
assert(len(number)==len(weighted))
rand=get_n_rand(number,weighted,3)
print("selected numbers:",rand)
print("their weights:",[weighted[number.index(i)] for i in rand])

由于您很难理解,

selection_from= [i for i,v in enumerate(weight_list) if v==weight]

等效于:

selection_from= []
for i in range(len(weight_list)):
   v= weight_list[i]
   if v==weight:
      selection_from.append(i)
© www.soinside.com 2019 - 2024. All rights reserved.