Python - 随机数在 0 和 1 之间的概率
Python - probability of a random number between 0 and 1
我知道我们使用 random.random() 生成一个介于 0 和 1 之间的随机小数。
随机数小于 .5 的概率是否等于 50%?
并且随机数大于0.5等于50%?
是的。来自文档:
Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator.
自己测试的小片段。但查德米勒所说的似乎是最正确的答案。与生成小于 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)
使用以下方法进行快速测试后:
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
运行 四次(由于内存错误),我总共有 134,217,147 个结果小于 .5,134,218,309 个结果大于 .5,none 等于 .5。
这导致总共 49.9997836% 的结果小于 .5。
实际结果可能因系统时钟的种子而异。
我知道我们使用 random.random() 生成一个介于 0 和 1 之间的随机小数。 随机数小于 .5 的概率是否等于 50%? 并且随机数大于0.5等于50%?
是的。来自文档:
Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator.
自己测试的小片段。但查德米勒所说的似乎是最正确的答案。与生成小于 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)
使用以下方法进行快速测试后:
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
运行 四次(由于内存错误),我总共有 134,217,147 个结果小于 .5,134,218,309 个结果大于 .5,none 等于 .5。 这导致总共 49.9997836% 的结果小于 .5。
实际结果可能因系统时钟的种子而异。