我需要编写一个随机返回数字(-2,-1,0,1,2)的函数,但我需要输出的平均值是一个特定的数字(比如1.2)。 / p>
我看到similar questions,但所有答案似乎都依赖于足够宽的目标范围。
有没有办法用这么少的可能输出来做这个(没有保存状态)?
UPDATE :我想将这个函数用于(随机)测试,作为我不想运行的昂贵函数的存根。此功能的消费者运行它几百次并取平均值。我一直在使用简单的randint函数,但平均值总是非常接近0,这是不现实的。
重点是,我只需要一些简单的东西,并不总是平均为0.我真的不在乎实际的平均值是多少。我可能问过这个问题。
答案 0 :(得分:1)
您是否真的要求将特定值设为平均值,或者更确切地说是expected value?换句话说,如果生成的序列在其初始部分中包含非常多的小值,那么序列的其余部分是否应该尝试补偿这一点以试图获得总体平均值?我假设没有,我假设您希望独立计算所有样本(毕竟,您说您不想要任何状态),在这种情况下,您只能控制预期值。
如果为每个可能的选择分配概率 p i ,那么期望值将是这些值的总和,按其概率加权:
EV = - 2 p -2 - p -1 + p 1 + 2 p 2 = 1.2
作为附加约束,您必须要求这些概率中的每一个都是非负的,并且上述四个加起来的值小于1,其余值乘以第五个概率 p <子> 0 子>
有许多可能的任务满足这些要求,任何人都会按照你的要求去做。其中哪一个对您的应用程序来说是合理的,取决于该应用程序的功能。
您可以使用PRNG生成均匀分布在[0,1)范围内的变量,然后将这些概率作为切割点的累积总和映射到您描述的情况。