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)。使用循环功能
您的问题不太清楚,如果不能解决您的问题,请发表评论。定义函数,该函数从列表和权重中返回随机数。确保您拥有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)