2

我需要编写一个随机返回数字(-2,-1,0,1,2)的函数,但我需要输出的平均值为特定数字(例如,1.2)。

我看到了类似的 问题,但所有答案似乎都依赖于目标范围足够宽。

有没有办法通过这个小的可能输出选择来做到这一点(不保存状态)?

更新:我想将此函数用于(随机)测试,作为我不想运行的昂贵函数的存根。这个函数的使用者运行了几百次并取平均值。我一直在使用一个简单的 randint 函数,但是平均值总是非常接近于 0,这是不现实的。

重点是,我只需要一些简单的东西,不会总是平均为 0。我真的不在乎实际的平均值是多少。我可能问错了问题。

4

1 回答 1

1

您是否真的要要求该特定值是平均值,或者更确切地说是期望值?换句话说,如果生成的序列在其初始部分包含非常多的小值,那么序列的其余部分是否应该尝试补偿这一点以试图获得整体平均值?我假设不是,我假设您希望独立计算所有样本(毕竟,您说过您不想要任何状态),在这种情况下您只能控制预期值。

如果您为每个可能的选择分配一个概率p i,那么期望值将是这些值的总和,由它们的概率加权:

EV = - 2 p -2 - p -1 + p 1 + 2 p 2 = 1.2

作为附加约束,您必须要求这些概率中的每一个都是非负的,并且上述四个加起来的值小于 1,余数由第五个概率p 0取。

有许多可能的任务可以满足这些要求,任何人都会按照你的要求去做。其中哪些对您的应用程序是合理的取决于该应用程序的功能。

您可以使用 PRNG 生成在 [0,1) 范围内均匀分布的变量,然后通过将概率的累积总和作为切点将这些映射到您描述的情况。

于 2013-07-18T13:57:41.410 回答