Python——隨機數生成模塊numpy.random


本文轉載自:https://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:位的長度

代碼示例:

(1) np.random.rand(2,3) #產生2行三列均勻分布隨機數組
Out[7]: 
array([[ 0.35369993,  0.0086019 ,  0.52609906],
       [ 0.31978928,  0.27069309,  0.21930115]])

(2)In [8]: np.random.randn(3,3) #三行三列正態分布隨機數據
Out[8]: 
array([[ 2.29864491,  0.52591291, -0.80812825],
       [ 0.37035029, -0.07191693, -0.76625886],
       [-1.264493  ,  1.12006474, -0.45698648]])
(3)In [9]: np.random.randint(1,100,[5,5]) #(1,100)以內的5行5列隨機整數
Out[9]: 
array([[87, 69,  3, 86, 85],
       [13, 49, 59,  7, 31],
       [19, 96, 70, 10, 71],
       [91, 10, 52, 38, 49],
       [ 8, 21, 55, 96, 34]])
(4)In [10]: np.random.random(10) #(0,1)以內10個隨機浮點數
Out[10]: 
array([ 0.33846136,  0.06517708,  0.41138166,  0.34638839,  0.41977818,
        0.37188863,  0.2508949 ,  0.89923638,  0.51341298,  0.71233872])
(5)In [11]: np.random.choice(10) #[0,10)內隨機選擇一個數
Out[11]: 7

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]) 齊普夫分布  

代碼示例:

(1)正態分布
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')
plt.show()

得到圖像: 

 


4. 排列

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

代碼示例:

(1)正態分布
import numpy as np
rand_data = np.random.randint(1, 10, (3, 4))
print(rand_data)
np.random.shuffle(rand_data)
print(rand_data)

out:
[[4 4 4 8]
 [5 6 8 2]
 [1 7 6 6]]
[[4 4 4 8]
 [1 7 6 6]
 [5 6 8 2]]
#按照行打亂了,也就是交換了行

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM