1. 程式人生 > >numpy產生隨機數

numpy產生隨機數

本文轉自部落格:http://blog.csdn.net/jinxiaonian11/article/details/53143141

在資料分析中,資料的獲取是第一步,numpy.random 模組提供了非常全的自動產生資料API,是學習資料分析的第一步。 
總體來說,numpy.random模組分為四個部分,對應四種功能: 
1. 簡單隨機數: 產生簡單的隨機資料,可以是任何維度 
2. 排列:將所給物件隨機排列 
3. 分佈:產生指定分佈的資料,如高斯分佈等 
4. 生成器:種隨機數種子,根據同一種子產生的隨機數是相同的 

以下是詳細內容以及程式碼例項:(以下程式碼預設已匯入numpy:import numpy as np

 )

1. 生成器

電腦產生隨機數需要明白以下幾點: 
(1)隨機數是由隨機種子根據一定的計算方法計算出來的數值。所以,只要計算方法一定,隨機種子一定,那麼產生的隨機數就不會變。 
(2)只要使用者不設定隨機種子,那麼在預設情況下隨機種子來自系統時鐘(即定時/計數器的值) 
(3)隨機數產生的演算法與系統有關,Windows和Linux是不同的,也就是說,即便是隨機種子一樣,不同系統產生的隨機數也不一樣。 
numpy.random 設定種子的方法有:

函式名稱函式功能引數說明
RandomState定義種子類RandomState是一個種子類,提供了各種種子方法,最常用seed
seed([seed])定義全域性種子引數為整數或者矩陣

程式碼示例:

np.random.seed(1234) #設定隨機種子為1234

2. 簡單隨機數

函式名稱函式功能引數說明
rand(d0, d1, …, dn)產生均勻分佈的隨機數dn為第n維資料的維度
randn(d0, d1, …, dn)產生標準正態分佈隨機數dn為第n維資料的維度
randint(low[, high, size, dtype])產生隨機整數low:最小值;high:最大值;size:資料個數
random_sample([size])在[0,1)內產生隨機數size:隨機數的shape,可以為元祖或者列表,[2,3]表示2維隨機數,維度為(2,3)
random([size])同random_sample([size])同random_sample([size])
ranf([size])同random_sample([size])同random_sample([size])
sample([size]))同random_sample([size])同random_sample([size])
choice(a[, size, replace, p])從a中隨機選擇指定資料a:1維陣列 size:返回資料形狀
bytes(length)返回隨機位length:位的長度

程式碼示例

>>> import numpy as np
>>> print(np.random.rand(2,3))  #產生2行三列均勻分佈隨機陣列
[[ 0.00764233  0.3830022   0.55875737]

 [ 0.33188605  0.63720051  0.69983149]]

>>> print(np.random.randn(3,3))  #三行三列正態分佈隨機資料
[[-2.25581993  0.28401035 -0.39071727]
 [ 0.3554526  -0.79093564 -0.31146916]

 [ 1.02469652  0.12776135  2.28273697]]

>>> print(np.random.randint(1,100,[5,5]))   #(1,100)以內的5行5列隨機整數
[[ 3  8 17 93 18]
 [49 88 24 74 90]
 [31 49 36 20 33]
 [ 6 10 91 82 18]

 [26  8 76 90 55]]

>>> print(np.random.random(10))  #(0,1)以內10個隨機浮點數
[ 0.68046894  0.99589507  0.55610842  0.28758456  0.7304742   0.5175079

  0.06014449  0.58060165  0.03519808  0.77347185]

3. 分佈

numpy.random模組提供了產生各種分佈隨機數的API:

函式名稱函式功能引數說明
beta(a, b[, size])貝塔分佈樣本,在 [0, 1]內。
binomial(n, p[, size])二項分佈的樣本。
chisquare(df[, size])卡方分佈樣本。
dirichlet(alpha[, size])狄利克雷分佈樣本。
exponential([scale, size])指數分佈
f(dfnum, dfden[, size])F分佈樣本。
gamma(shape[, scale, size])伽馬分佈
geometric(p[, size])幾何分佈
gumbel([loc, scale, size])耿貝爾分佈。
hypergeometric(ngood, nbad, nsample[, size])超幾何分佈樣本。
laplace([loc, scale, size])拉普拉斯或雙指數分佈樣本
logistic([loc, scale, size])Logistic分佈樣本
lognormal([mean, sigma, size])對數正態分佈
logseries(p[, size])對數級數分佈。
multinomial(n, pvals[, size])多項分佈
multivariate_normal(mean, cov[, size])多元正態分佈。
negative_binomial(n, p[, size])負二項分佈
noncentral_chisquare(df, nonc[, size])非中心卡方分佈
noncentral_f(dfnum, dfden, nonc[, size])非中心F分佈
normal([loc, scale, size])正態(高斯)分佈
pareto(a[, size])帕累託(Lomax)分佈
poisson([lam, size])泊松分佈
power(a[, size])Draws samples in [0, 1] from a power distribution with positive exponent a - 1.
rayleigh([scale, size])Rayleigh 分佈
standard_cauchy([size])標準柯西分佈
standard_exponential([size])標準的指數分佈
standard_gamma(shape[, size])標準伽馬分佈
standard_normal([size])標準正態分佈 (mean=0, stdev=1).
standard_t(df[, size])Standard Student’s t distribution with df degrees of freedom.
triangular(left, mode, right[, size])三角形分佈
uniform([low, high, size])均勻分佈
vonmises(mu, kappa[, size])von Mises分佈
wald(mean, scale[, size])瓦爾德(逆高斯)分佈
weibull(a[, size])Weibull 分佈
zipf(a[, size])齊普夫分佈

程式碼示例

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> mu=1    #數學期望:1
>>> sigma=3   #標準差:3
>>> num=10000   #個數:10000
>>> rand_data = np.random.normal(mu, sigma, num)
>>> count, bins, ignored = plt.hist(rand_data, 30, normed=True)
>>> plt.plot(bins, 1/(sigma * np.sqrt(2 * np.pi)) *np.exp( - (bins - mu)**2 / (2 * sigma**2)), linewidth=2, color='r')
[<matplotlib.lines.Line2D object at 0x7f29dc3d9128>]

>>> plt.show()


4. 排列

函式名稱函式功能引數說明
shuffle(x)打亂物件x(多維矩陣按照第一維打亂)矩陣或者列表
permutation(x)打亂並返回該物件(多維矩陣按照第一維打亂)整數或者矩陣

程式碼示例

>>> import numpy as np
>>> rand_data=np.random.randint(1,10,(3,4))
>>> print(rand_data)
[[4 4 6 9]
 [3 4 2 2]
 [3 9 3 3]]
>>> np.random.shuffle(rand_data)
>>> print(rand_data)
[[4 4 6 9]
 [3 9 3 3]
 [3 4 2 2]]