如何解决Python:如何从加权列表中将变量设置为随机值?
我对编码还很陌生,因此无法找到上述问题的答案。这是我所拥有的:
E0 = 1
rho = 0.8
def sigma():
numberlist = [0.5,0.2,0.14,0.07]
sigmanew = randomchoices(numberlist,weights=(5,15,30,50),k=1)
return sigmanew
def deriv(y,t,sigma,rho)
E = y
dEdt = sigma * (1 - rho) * E
return dEdt
t = np.linspace(0,250,61)
y0 = E0
ret = odeint(deriv,y0,args=(N,rho))
E = ret.T
我希望每次基于这些权重运行代码时,将sigma的值设置为新值,但这似乎不起作用。我知道我可以在这个范围内调用random.uniform,但是值是加权的这一事实很重要。 我该怎么做?
解决方法
鉴于您要生成一个数字,假设您可以使用1到10之间的代码
$members[0]['bestOpponentAttack']
第一个值1是最小,第二个值10是最大。
,将numpy.random.choice
与p
参数一起使用:
def sigma():
numberlist = [0.5,0.2,0.14,0.07]
weights = np.array([5,15,30,50])
weights = weights/weights.sum()
sigmanew = np.random.choice(numberlist,1,p=weights)
return sigmanew[0]
您可以看到使用np.unique
对值进行了相应的加权:
np.unique([sigma() for _ in range(100)],return_counts=True)
输出:
(array([0.07,0.5 ]),array([48,28,17,7],dtype=int64))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。