2017-10-15 104 views
-1

我正在嘗試生成一些數據,例如:年齡與一週內堆棧溢出花費的小時數。我嘗試使用randn函數,但它不能控制生成的值的範圍和值的量化。我嘗試了一些算法,例如盒子加工方法,但同樣的問題也出現在那裏。可以生成兩個均勻變量,但對正態分佈值的控制是什麼?有人可以解釋我,我怎麼可以在Python中執行此操作?Python生成正態分佈的僞數據

+0

你所說的「價值量化」是什麼意思? – user8153

+0

我不希望年齡爲12.3歲,它應該只是整數,其中小時可以是0.5小時的倍數@ user8153 – user8778850

+0

請問[this](https://stackoverflow.com/questions/36894191/)幫幫我? –

回答

0

我認爲這是你在找什麼:

def get_truncated_normal(mean=0, sd=1, low=0, upp=10): 
    return truncnorm(
     (low - mean)/sd, (upp - mean)/sd, loc=mean, scale=sd) 

X = get_truncated_normal(mean=15, sd=2, low=0, upp=1000) 
a=(X.rvs(100)) 
0

Numpy的random.normal將做的伎倆。您需要提供中位數,標準差和所需的大小。

import numpy as np 
import matplotlib.pyplot as plt 
import scipy.stats as stats 

M = 25 
SD = 5 
n = 100 
age = np.random.normal(M, SD, n) 
sorted_age = sorted(age) 

pdf = stats.norm.pdf(sorted_age, M, SD) 
plt.plot(sorted_age, pdf) 
plt.show() 

enter image description here

+0

這不是我的問題的答案 – user8778850

+0

我想要的是pdf處於一定的範圍內,併爲我提供了量化值。年齡只有12到50之間的自然數。我需要年齡的實際值 – user8778850

1

我假定這兩個變量是獨立的。這是一種做正義年齡的方法。

>>> import numpy as np 

生成大小50位置的隨機的,單變量正常樣品和規模30.

>>> ages = np.random.normal(30,30,50) 

丟棄值小於零。如果你需要一些固定的樣本量,那麼你必須做一些更聰明的事情。

>>> ages = [age for age in ages if age>=0] 

獲得最大的年齡值,知道最大的bin邊界必須是什麼。

>>> max(ages) 
90.513300401178611 

創建箱到指定歲,0〜1,1〜2等

>>> bins = np.arange(0,92,1) 

確認最後一個塊的邊界是大到足以容納最大年齡。

>>> max(bins) 
91 

將年齡分配給垃圾箱。

>>> sample = np.digitize(ages, bins) 

顯示結果。

>>> sample 
array([20, 82, 73, 21, 7, 39, 56, 23, 37, 15, 9, 21, 46, 6, 51, 13, 89, 
     47, 46, 4, 78, 33, 29, 26, 74, 72, 62, 52, 2, 48, 39, 91, 40, 38, 
     40, 12, 59, 77, 52, 65, 35, 69, 31, 74, 18], dtype=int64) 
+0

爲什麼這個問題是低估的。你給了我最完美的答案 – user8778850

+0

可能是因爲你沒有顯示你編寫的代碼試圖爲你自己解決問題。我只是在猜測。我厭惡選票,因爲很難知道選民抗​​議的是什麼。事實上,如果你看我的檔案,你會發現我只有一次倒票。 –