簡體   English   中英

如何在python中生成高度統一的隨機數?

[英]How to generate highly uniform random number in 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之間的數字。

您要的不是隨機的; 實際上,它是相當結構化的。 隨機數據的重點在於它不是結構化的:您不能說值是什么,只能說它們的平均值

不過,您仍然可以執行所需的操作:只需指定您希望數字落入的范圍即可。

>>> 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)(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.

知道問題的內容將有所幫助,但似乎您正在尋找的是低差異序列,而不是通常的偽隨機數。

更具體地說,檢查Halton序列是否給您所需的結果。 Python實現可用

嗯,這有點違反了“隨機”數字的目的,但是Python確實支持這一點。

作為random模塊的一部分( import random ),可以使用random.uniform(a,b)代替random.random() ,其中ab是浮點數的范圍。

有關更多信息,請參見Python文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM