2015-04-06 96 views
-2

我想根據根據二項式和指數分佈生成數字

1)在[0,1]之間生成N(1000)數字。二項分佈:對於二項分佈,如果我使用s=np.random.binomial(10,0.5,1000)那麼我得到的數字在1到10之間。有什麼辦法可以將它們限制在[0,1]

2)。指數分佈:對於指數如果我使用:x=np.random.exponential(1,1000)那麼我也無法獲得[0,1]之間的數字

是否有某種方式可以根據我在python [0,1]之間生成浮點數到二項和指數分佈。

回答

0

二項分佈:

vcnt = 10  
s=np.random.binomial(vcnt,0.5,1000) 
s = [elem/float(vcnt) for elem in s] 

或者你也可以用做:

vcnt = 10  
s=np.random.binomial(vcnt,0.5,1000)/float(vcnt) 

你可以檢查與結果:

print(max(s)) 
print(min(s)) 

指數分佈,這是更復雜,因爲指數分佈的隨機變量可以採用無限大(小)的值。

+0

好的謝謝。如果我想生成「N」個數字(而不是1000個),那麼將使用哪個值。另外神奇(e-1)/ 9是如何來:)我也得到一個所有0的數組??這恐怕不應該是這種情況 – 2015-04-06 14:14:02

+0

如果生成「N」號碼,代碼將會相同。一般形式 vcnt = 10 s = np.random.binomial(vcnt,0.5,1000) s = [e/s] – kvorobiev 2015-04-06 14:21:06

+0

@Steg Verner請嘗試我的答案中的新代碼。 – kvorobiev 2015-04-06 14:23:41

0

1)沒有辦法在0和1之間生成二項分佈式浮點數。爲什麼?因爲在二項分佈中,隨機變量N =成功次數,因此每個定義一個整數。你可以做的是:

s = np.random.binomial(100, 0.5, size=1000)/100. 

編輯:或者等價形式:

s = np.random.binomial(100, 0.5, size=1000)/float(100) 

爲了確保您一個浮動,而不是一個整數devide。

這將根據n(=試驗次數)= 100,p = 0.5根據比例二項式分佈爲您提供0.xx形式的花車。你用這段代碼得到了什麼?對於每一個抽取的隨機變量,你每次擲硬幣100次,並在每次顯示頭部時將1加1(或者尾巴,因爲你選擇p爲0.5)並不重要。由於這樣的事實,頭部和長度100的尾部的任何序列具有相同的概率(即P 1 100),您可以根據所有可能的組合數與分配結束:

http://en.wikipedia.org/wiki/Combination

你做什麼除以100是你定義你的隨機變量不加1時,頭顯示,但1/100。爲了增加N到1000或10000,你會越來越接近的東西,可以用正態分佈來近似:

http://en.wikipedia.org/wiki/Binomial_distribution#Normal_approximation

http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.normal.html#numpy.random.normal

注意p不應該是接近0或1爲近似值。

2)在這裏,你可能要像泊松分佈:

http://en.wikipedia.org/wiki/Binomial_distribution#Poisson_approximation

http://en.wikipedia.org/wiki/Poisson_distribution

https://stats.stackexchange.com/questions/2092/relationship-between-poisson-and-exponential-distribution

+0

好的...但我得到一個0的數組 – 2015-04-06 14:18:44

+0

你寫了100後面的點嗎?點使浮點數超過100(這通常是python中的整數)。如果100保持一個整數,你的結果將是一個整數。 – 2015-04-06 14:23:07