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]]