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 概率)但 random.choice 函数有时会选择 1,1。
所以,我认为我取一个数字(假设是 3)数字=[1,2,4,5]加权=[0.1,0.1,0.3,0.1]我取一个数字(假设是 4)。使用循环函数
您的问题不太清楚,如果不能解决您的问题,请发表评论。定义从列表和权重中返回随机值的 functionn。另一个函数可以确保你有 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)
我是一名优秀的程序员,十分优秀!