Python 使用移动的钟形曲线创建随机权重

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

我是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创建五个权重,如下所示:

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)