繁体   English   中英

从一组x个项目中,重复每个项目y次,以使y服从正态分布

[英]from a set of x items, repeat each item y times such that, y follows a normal distribution

从一组x个唯一项中,我需要重复每个项y次,以使y服从正态分布。

例如,如果项目数n = 5,并且y_max =50。如果我们计算已排序列表中每个项目的重复次数,视觉效果将如下所示:

在此处输入图片说明

my_set=('a','b','c','d','e')
distribution = np.random.normal(len(my_set)/2, 1,len(my_set)).round().astype(int)
np.repeat(my_set, distribution)

我希望结果遵循与图表类似的趋势,但是结果遵循上升或下降趋势。

为了便于阅读,我将使用元组而不是将每个项目重复y次。

预期结果应为:

[('a', 2), ('b', 4), ('c', 5), ('d', 3), ('e', 1)]

实际结果 :

[('a', 5), ('b', 4), ('c', 3), ('d', 4), ('e', 3)]

首先,让我们产生期望的结果。

my_set = ('a', 'b', 'c', 'd', 'e')
distribution = np.random.normal(len(my_set)/2, 1, 10000).round().astype(int)
result = [my_set[max(min(el, 4), 0)] for el in distribution]
np.unique(result, return_counts=True)
>>> (array(['a', 'b', 'c', 'd', 'e'], dtype='<U1'),
>>> array([ 234, 1377, 3421, 3374, 1594]))

在这里,我们根据给定的分布生成10000个随机值,并采用相应的字母代替每个数字。 因此,计数仅代表我们正在寻找的东西:每个字母的出现次数通常是可分配的。

代码中的核心问题是了解什么是分布或什么值正态分布。 当我们调用np.random.normal时,它所做的只是生成一个正态分布的变量。 根据正态分布的定义,这意味着一定数量的x以一定的概率出现p = pdf正常 从频率的角度来看,这意味着如果我们多次运行变量生成,则试验总数的分数p将为x 而这正是我们所寻找的。

在您的代码中,您要做的是使这样的变量:发生次数本身是正态分布的。 这意味着每个字母将出现n +- s次,而s正态分布。 因此它基本上是正态分布,具有正态误差。 仔细阅读您的文章,我认为这不是您想要的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM