Python 使用移动的钟形曲线创建随机权重
我是Python的初学者,尝试一些对我来说有点太复杂的东西 我想输出一个列表(q),k项长,其中每个项是五个选项中的一个(包含在列表w中) 我正在使用random.choices创建列表q 我希望每个项目的权重由一条倾斜的钟形曲线(甚至是一个粗略的近似值)控制,其中曲线峰值的水平位置等于p。p的范围为0.1到1 因此,如果p=0.55,项目c出现在列表q中的概率最高,b和d的概率次之,a和e的概率最低。如果p=0.1,a最有可能出现,e最不可能出现,依此类推 我找到了scipy.stats.skewnorm,它似乎可以工作。然而,我真的很难把它调整到我需要的状态 我在寻找一个函数,其中0≤ Y≤ 1和0≤ x≤ 1.2. 然后我想让这个函数为random.choices创建五个权重,如下所示:Python 使用移动的钟形曲线创建随机权重,python,random,statistics,probability,Python,Random,Statistics,Probability,我是Python的初学者,尝试一些对我来说有点太复杂的东西 我想输出一个列表(q),k项长,其中每个项是五个选项中的一个(包含在列表w中) 我正在使用random.choices创建列表q 我希望每个项目的权重由一条倾斜的钟形曲线(甚至是一个粗略的近似值)控制,其中曲线峰值的水平位置等于p。p的范围为0.1到1 因此,如果p=0.55,项目c出现在列表q中的概率最高,b和d的概率次之,a和e的概率最低。如果p=0.1,a最有可能出现,e最不可能出现,依此类推 我找到了scipy.stats.sk
p = 0.7
prob_a = f(0.2, p)
prob_b = f(0.4, p)
prob_c = f(0.6, p)
etc...
q = random.choices(w, weights=[prob_a, prob_b, prob_c, etc...], k=10)
我将非常感谢所有的建议、指导或建议!我既不喜欢随机选择,也不喜欢偏斜标准——如果有一种更简单的方法可以达到类似的结果,那就太棒了 根据到目前为止您所写的内容,我认为您希望做如下工作:
from scipy import stats
from random import choices
def weighted_choices(w, mu, sd, *, k=1):
weights = stats.norm(mu, sd).pdf(range(len(w)))
return choices(w, weights=weights, k=k)
其中,mu
是您最希望成为的w
的索引,sd
是您希望该选择的紧密程度。e、 g:
几乎总是选择加权选择('abcde',1,0.1)
b
倾向于选择weighted_选项('abcde',3,0.5)
,但有合理的机会选择d
或c
,选择e
的机会要小得多a
基本上是一致的加权选择('abcde',2,10)
x
和y
?@SamMason我只是用x
和y
来显示我所追求的函数的域和范围。在我的代码中,x
将是我找到函数输出的五个点(0.2、0.4等)之一。和y
:我总是希望输出小于1。至于倾斜的钟形曲线:我想我想要y
拟合正态分布的曲线,但是根据p
,分布偏离中心。最后,如果p
=~0.5,我希望列表q
大部分时间包含c,但有时包含特征b和d,偶尔包含特征a和e。可以肯定的是,你不希望出现扭曲分布,你只需要移动平均值。你的点重新标记似乎混淆了这个问题,使用索引同样强大,意味着你不需要在任何地方都指定它们,这非常有效-谢谢!
from scipy import stats
from random import choices
def weighted_choices(w, mu, sd, *, k=1):
weights = stats.norm(mu, sd).pdf(range(len(w)))
return choices(w, weights=weights, k=k)