python - 随机选择一个 5 位数字和单独选择每个数字有什么区别?

标签 python language-agnostic probability

使用 random.randrange 有什么区别吗?单独选择 5 位数字,如下所示:

a=random.randrange(0,10)
b=random.randrange(0,10)
c=random.randrange(0,10)
d=random.randrange(0,10)
e=random.randrange(0,10)
print (a,b,c,d,e)

...然后一次选择 5 位数字,如下所示:

x=random.randrange(0, 100000)
print (x)  

最佳答案

与一次数字方法的实用性和可维护性缺点相比,任何随机数生成器差异(如果有的话——请参阅随机性部分)都是微不足道的。

对于初学者来说,生成每个数字需要更多的代码来处理完美的正常调用,例如 randrange(0, 1024)randrange(0, 2**32),其中数字出现的概率相等。例如,在闭区间 [0,1023](需要 4 位数字)上,四位中的第一位永远不能是 0 或 1 以外的任何数字。最后一位的可能性稍大为 0、1、2 或 3。依此类推。

试图覆盖所有基础会很快使代码变得更慢、更容易出错并且比现在更脆弱。 (您在发布此问题时遇到的烦人小细节的数量应该让您了解这条道路的更深处。)

...所有的悲伤都在之前你认为是多么容易random.randrange处理非零 start 值、step 参数和负参数。

随机性问题

如果您的 RNG 很好,您的替代方法应该会产生“同样随机”的结果(假设您已经处理了我上面提到的所有问题)。 但是,如果您的 RNG 有偏差,那么一次一个数字的方法可能会增加其对输出的影响。

出于演示目的,假设您的偏向荒谬的 RNG 有一个差一错误,因此它从不产生给定范围的最后一个值:

  • 调用 randrange(0, 2**32) 永远不会产生 2**32 - 1 (4,294,967,295),但剩下的 40 亿-plus 值将以非常接近其预期的概率出现。它经过数百万次调用后的输出很难与正常工作的伪随机数生成器区分开来。

  • 单独生成同一个假定随机数的十位数字将使 每个 数字出现相同的差一错误,从而导致十位数字的输出完全由数字 [0,8],没有 9...ever。这比一次生成整数要“随机性低”得多。

相反,一次一个数字的方法永远不会比支持它的 RNG 更好,即使请求的范围非常小。该方法可能会放大任何 RNG 偏差,或者只是重复该偏差,但它永远不会减少它。

关于python - 随机选择一个 5 位数字和单独选择每个数字有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37175552/

相关文章:

Python __init__ 参数问题

python - 有没有办法检查字符串是否包含未知格式的日期?

python - Python 中的海量变量声明和赋值

.net - Visual Studio可以支持我们自己的DSL吗?

python - Django 模型字段验证器未按应有的方式引发异常

arrays - 设计指标的建议

algorithm - 最长递增序列的应用

r - 柯尔莫哥洛夫-斯米尔诺夫检验

matlab - 求具有范围的高斯随机变量的概率

php - 从给定的一组数字和机会生成随机数