如何在python中生成高度一致的随机数?

如何在python中生成高度一致的随机数?,python,random,uniform,Python,Random,Uniform,在某种程度上,我需要一个随机函数,可以生成高度一致的数字,比如,当我说[5,5],我运行这个函数10次,我希望有5个小于0.5的数字,其他5个大于0.5 每次运行应分开,如: for i in range(0,10): rnd=random_function([6,3,1]) print rnd 在运行这个函数十次之后,我有6个数字小于0.6,3个数字在0.6到0.9之间,1个数字在0.9到1之间 有人知道我怎么做吗?因为python中的随机函数不是那么统一。。。。谢谢 随机性的本

在某种程度上,我需要一个随机函数,可以生成高度一致的数字,比如,当我说[5,5],我运行这个函数10次,我希望有5个小于0.5的数字,其他5个大于0.5

每次运行应分开,如:

for i in range(0,10):
   rnd=random_function([6,3,1])
   print rnd
在运行这个函数十次之后,我有6个数字小于0.6,3个数字在0.6到0.9之间,1个数字在0.9到1之间


有人知道我怎么做吗?因为python中的随机函数不是那么统一。。。。谢谢

随机性的本质不是不一致吗?如果你想生成6个随机数,其中一半在0.5以下,另一半在0.5以上,那么你应该生成3个介于0和0.5之间的数字,并生成3个介于0.5和1之间的数字。

随机数的本质不是不一致吗?如果您想生成6个随机数,并且希望其中一半小于0.5,另一半大于0.5,那么您应该生成3个介于0和0.5之间的数字,并生成3个介于0.5和1之间的数字。

嗯,这有点违背了随机数的目的,但Python确实支持这一点

作为随机模块导入random的一部分,可以使用random.uniforma,b而不是random.random,其中a到b是浮点范围


更多信息请参见。

这有点违背了随机数的目的,但Python确实支持这一点

作为随机模块导入random的一部分,可以使用random.uniforma,b而不是random.random,其中a到b是浮点范围


更多信息请访问。

您所要求的不是随机的;事实上,它的结构相当合理。随机数据的意义在于它不是结构化的:你不能说任何关于值的内容,只能说它们的平均值

不过,你仍然可以做你想做的事情:只需指定你想让你的数字进入的范围

>>> def random_function(*args):
...     n = sum(args)
...     bottom = 0
...     for m in args:
...             for _ in range(m):
...                     yield random.uniform(bottom, bottom + m/n)
...             bottom += m/n
...
>>> list(random_function(6,3,1))
[0.1849778317803791, 0.2779140519434712, 0.08380168147928498, 0.5477412922676888
, 0.5158697440011519, 0.5535466918038039, 0.8046993690361345, 0.714614514522802,
 0.7102988180048052, 0.9608096335125095]
>>> list(random_function(6,3,1))
[0.29313403848522546, 0.5543469551407342, 0.14208842652528347, 0.344464024804118
7, 0.3168266508239002, 0.5956620829410604, 0.673021479097414, 0.7141779120687652
, 0.7783099010964684, 0.9103924993423906]
说明:

给定6,3,1,算出它们的和10。我们需要六个介于0和6/10之间的数字,三个介于6/10和6/10+3/10之间的数字,以及一个介于6/10+3/10和6/10+3/10+1/10之间的数字。我们可以通过调用

random.uniform(0, 6/10) six times,
random.uniform(6/10, 9/10) three times, and
random.uniform(9/10, 1) once.

你所要求的不是随机的;事实上,它的结构相当合理。随机数据的意义在于它不是结构化的:你不能说任何关于值的内容,只能说它们的平均值

不过,你仍然可以做你想做的事情:只需指定你想让你的数字进入的范围

>>> def random_function(*args):
...     n = sum(args)
...     bottom = 0
...     for m in args:
...             for _ in range(m):
...                     yield random.uniform(bottom, bottom + m/n)
...             bottom += m/n
...
>>> list(random_function(6,3,1))
[0.1849778317803791, 0.2779140519434712, 0.08380168147928498, 0.5477412922676888
, 0.5158697440011519, 0.5535466918038039, 0.8046993690361345, 0.714614514522802,
 0.7102988180048052, 0.9608096335125095]
>>> list(random_function(6,3,1))
[0.29313403848522546, 0.5543469551407342, 0.14208842652528347, 0.344464024804118
7, 0.3168266508239002, 0.5956620829410604, 0.673021479097414, 0.7141779120687652
, 0.7783099010964684, 0.9103924993423906]
说明:

给定6,3,1,算出它们的和10。我们需要六个介于0和6/10之间的数字,三个介于6/10和6/10+3/10之间的数字,以及一个介于6/10+3/10和6/10+3/10+1/10之间的数字。我们可以通过调用

random.uniform(0, 6/10) six times,
random.uniform(6/10, 9/10) three times, and
random.uniform(9/10, 1) once.

了解问题的背景可能会有所帮助,但你可能要寻找的是s,而不是通常的伪随机数


更具体地说,检查Halton序列是否提供了所需的结果。Python实现。

了解问题的上下文可能会有所帮助,但您可能要寻找的是s,而不是通常的伪随机数


更具体地说,检查Halton序列是否提供了所需的结果。Python实现。

即使是最好的RNG也不会总是满足您的需求。如果您想要某个给定范围内的数字,请使用该范围呼叫RNG。均匀分布是当生成的数接近无穷大时发生的事情。期望10个随机数的一致性是你不能总是指望的。这只能在极限内是一致的;如果它总是一致的,那就不会是随机的,对吗?你应该更好地解释你想做什么。如果你想要一致性,你并不真正想要随机性。如果你真的不在乎结果,使用随机函数,提供一个范围。在第一个例子中,你需要两组不同的随机数。一个统一的随机数生成器期望每1024次试验中所有10个数字都低于0.5。你所要求的不是随机的,即使是最好的RNG也不会总是给你想要的。如果您想要某个给定范围内的数字,请使用该范围呼叫RNG。均匀分布是当生成的数接近无穷大时发生的事情。期望10个随机数的一致性是你不能总是指望的。这只能在极限内是一致的;如果它总是一致的,那就不会是随机的,对吗?你应该更好地解释你想做什么。如果你想要一致性,你并不真正想要随机性。如果你真的不在乎结果,使用随机函数,提供一个范围。在第一个例子中,你需要两组不同的随机数。一个统一的随机数生成器期望每1024次试验中所有10个数字都低于0.5。你是什么
询问不是随机的。谢谢你的信息。我试过了,但似乎是随机的。统一格式,b和随机的没有太大区别。随机…:谢谢你的信息。我试过了,但似乎是随机的。统一格式,b和随机的没有太大区别。随机…: