Python—0到1之间的随机数的概率

Python—0到1之间的随机数的概率,python,probability,Python,Probability,我知道我们使用random.random()生成0到1之间的随机小数。 随机数小于0.5的概率等于50%吗? 随机数大于0.5等于50%?是的。从文档: 几乎所有模块函数都依赖于基本函数random(),该函数在半开放范围[0.0,1.0]内均匀地生成一个随机浮点值 是的。从文档: 几乎所有模块函数都依赖于基本函数random(),该函数在半开放范围[0.0,1.0]内均匀地生成一个随机浮点值 这是一个自己测试的小片段。但是Chad Miller所说的似乎是最正确的答案。它生成大于0.5的数字的

我知道我们使用random.random()生成0到1之间的随机小数。 随机数小于0.5的概率等于50%吗? 随机数大于0.5等于50%?

是的。从文档:

几乎所有模块函数都依赖于基本函数random(),该函数在半开放范围[0.0,1.0]内均匀地生成一个随机浮点值

是的。从文档:

几乎所有模块函数都依赖于基本函数random(),该函数在半开放范围[0.0,1.0]内均匀地生成一个随机浮点值


这是一个自己测试的小片段。但是Chad Miller所说的似乎是最正确的答案。它生成大于0.5的数字的概率总是比生成小于0.5的数字的概率稍低。 这是因为(0.5,1.0)是一个小于[0.0,0.5]的无穷大数集,因为0.0被包括在内,1.0被排除在外

import random

N_ITER = 10000000
results_greater = 0
results_lesser = 0
for i in xrange(N_ITER):
    random_number = random.random()
    results_greater += random_number > 0.5
    results_lesser += random_number < 0.5
print results_greater / float(N_ITER)
print results_lesser / float(N_ITER)
随机导入
N_ITER=10000000
结果大于等于0
结果_=0
对于X范围内的i(N_ITER):
random_number=random.random()
结果大于+=随机数>0.5
结果\u较小+=随机\u数<0.5
打印结果\u大于/浮动(N\u ITER)
打印结果\u较小/浮动(N\u ITER)

一个小片段,供您自己测试。但Chad Miller所说的似乎是最正确的答案。它生成大于0.5的数字的概率确实会比生成小于0.5的数字的概率略低。 这是因为(0.5,1.0)是一个小于[0.0,0.5]的无穷大数集,因为0.0被包括在内,1.0被排除在外

import random

N_ITER = 10000000
results_greater = 0
results_lesser = 0
for i in xrange(N_ITER):
    random_number = random.random()
    results_greater += random_number > 0.5
    results_lesser += random_number < 0.5
print results_greater / float(N_ITER)
print results_lesser / float(N_ITER)
随机导入
N_ITER=10000000
结果大于等于0
结果_=0
对于X范围内的i(N_ITER):
random_number=random.random()
结果大于+=随机数>0.5
结果\u较小+=随机\u数<0.5
打印结果\u大于/浮动(N\u ITER)
打印结果\u较小/浮动(N\u ITER)

使用以下工具快速测试后:

import random

random.seed( None )

less_than_half = 0
greater_than_half = 0
equal_to_half = 0

for i in range( 0, 2**26 ):
    x = random.random()
    if x < .5:
        less_than_half += 1
    elif x > .5:
        greater_than_half += 1
    else:
        equal_to_half += 1

print less_than_half
print greater_than_half
print equal_to_half
随机导入
随机。种子(无)
小于等于0的一半=0
大于一半=0
等于_到_的一半=0
对于范围(0,2**26)内的i:
x=random.random()
如果x小于0.5:
小于半个+=1
elif x>.5:
大于一半+=1
其他:
等于_到_一半+=1
打印少于一半的内容
打印大于一半的内容
打印等分
运行四次(由于内存错误),我总共有134217147个结果小于.5,134218309个结果大于.5,没有一个结果等于.5。 这导致49.9997836%的结果低于0.5


实际结果可能因系统时钟种子而异。

在使用以下各项进行快速测试后:

import random

random.seed( None )

less_than_half = 0
greater_than_half = 0
equal_to_half = 0

for i in range( 0, 2**26 ):
    x = random.random()
    if x < .5:
        less_than_half += 1
    elif x > .5:
        greater_than_half += 1
    else:
        equal_to_half += 1

print less_than_half
print greater_than_half
print equal_to_half
随机导入
随机。种子(无)
小于等于0的一半=0
大于一半=0
等于_到_的一半=0
对于范围(0,2**26)内的i:
x=random.random()
如果x小于0.5:
小于半个+=1
elif x>.5:
大于一半+=1
其他:
等于_到_一半+=1
打印少于一半的内容
打印大于一半的内容
打印等分
运行四次(由于内存错误),我总共有134217147个结果小于.5,134218309个结果大于.5,没有一个结果等于.5。 这导致49.9997836%的结果低于0.5



实际结果可能会因系统时钟的种子而有所不同。

应该是这样,但为什么不运行10亿个随机数,并将它们相加以确定其正确性呢?您可以阅读
random.random()
at.使用的系统。这就是
random.random()
正在尝试这样做。但是,如果您需要加密安全的随机数,请使用类似于
random.SystemRandom()的内容
@Sam那篇文章讨论了从位模式到浮点数的转换吗?这似乎是一个有效的问题。@Kevin通过指定
=0.5
而不是
>0.5
很容易地解决了这个问题。应该是这样的,但是为什么不运行10亿个随机数,并对它们进行统计以确定呢?您可以阅读b使用的系统y
random.random()
at。这就是
random.random()
试图做的。但是,如果您需要加密安全的随机数,请使用类似于
random.SystemRandom()的方法
@Sam那篇文章讨论了从位模式到浮点数的转换吗?这似乎是一个有效的问题。@Kevin通过指定
>=0.5
而不是
>0.5
很容易解决。这个答案取决于你是否知道“统一”的精确定义。例如,它是否会生成一个非标准化数字?这个答案取决于您是否知道“统一”的精确定义。例如,它是否会生成一个非标准化数字?如果您使用
xrange
而不是
range
@Rob,我打赌您的内存错误会消失ᵩ 不知道关于XRead,但是是的,它解决了这个问题(由于长期的限制,高达2 ^ 30)。在2 ** 52中命中浮点值的几率大约是1,所以毫不奇怪,没有一个等于0.5.ffh,考虑将Python 3翻转为默认值,并且你不需要记住像“XRealk”这样的哑黑客。还有其他难看的缺点。但是你必须在打印参数周围加上括号。我打赌如果你使用
xrange
而不是
range
@Rob,你的内存错误就会消失ᵩ 不知道关于XRead,但是是的,它解决了这个问题(由于长期的限制,高达2 ^ 30)。在2 ** 52中命中浮点值的几率大约是1,所以毫不奇怪,没有一个等于0.5.ffh,考虑将Python 3翻转为默认值,并且你不需要记住像“XRealk”这样的哑黑客。还有其他难看的疣子。但你必须把帕伦斯环起来