【发布时间】:2013-07-18 12:37:22
【问题描述】:
我需要编写一个随机返回数字 (-2,-1,0,1,2) 的函数,但我需要输出的平均值为特定数字(例如 1.2)。
我看到了similarquestions,但是所有的答案似乎都依赖于目标范围足够宽。
有没有办法通过这个小范围的可能输出来做到这一点(不保存状态)?
更新:我想将此函数用于(随机)测试,作为我不想运行的昂贵函数的存根。这个函数的使用者运行了几百次并取平均值。我一直在用一个简单的randint函数,但是平均值总是很接近0,这不太现实。
重点是,我只需要一些不会总是平均为 0 的简单数据。我并不关心实际的平均数是多少。我可能问错了问题。
【问题讨论】:
-
任何合理的 RNG 都会保存状态,因此如果没有某种形式的状态保存,您将无法解决您的问题,尽管它隐藏在 random() 系统调用中。此外,如果您需要总体平均值,那么如果没有至少保存的运行平均值,就很难找到解决方案。
-
@rossum - 不,不需要状态保存。 MvG 指出了一个有效的解决方案,通过调整离散概率以获得目标均值。
-
MvG 为您的类似问题提供了出色的无状态解决方案。他解决的是“期望值”问题,而不是“要求均值”问题。作为替代方案,
(1.2 - 2) + rand(5)呢?这实际上是从 (-0.8, 0.2, 1.2, 2.2, 3.2) 中挑选,即从具有所需平均值的集合中随机挑选。
标签: math random language-agnostic