在數據分析中,數據的獲取是第一步,numpy.random 模塊提供了非常全的自動產生數據API,是學習數據分析的第一步。
總體來說,numpy.random模塊分為四個部分,對應四種功能:
- 簡單隨機數: 產生簡單的隨機數據,可以是任何維度
- 排列:將所給對象隨機排列
- 分布:產生指定分布的數據,如高斯分布等
- 生成器:種隨機數種子,根據同一種子產生的隨機數是相同的
1. 生成器
電腦產生隨機數需要明白以下幾點:
- 隨機數是由隨機種子根據一定的計算方法計算出來的數值。所以,只要計算方法一定,隨機種子一定,那么產生的隨機數就不會變。
- 只要用戶不設置隨機種子,那么在默認情況下隨機種子來自系統時鍾(即定時/計數器的值)
- 隨機數產生的算法與系統有關,Windows和Linux是不同的,也就是說,即便是隨機種子一樣,不同系統產生的隨機數也不一樣。
numpy.random 設置種子的方法有:
函數名稱 | 函數功能 | 參數說明 |
---|---|---|
RandomState | 定義種子類 | RandomState是一個種子類,提供了各種種子方法,最常用seed |
seed([seed]) | 定義全局種子 | 參數為整數或者矩陣 |
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:位的長度 |
python生成隨機數、隨機字符串
import random
import string
# 隨機整數:
print random.randint(1,50)
# 隨機選取0到100間的偶數:
print random.randrange(0, 101, 2)
#隨機產生范圍內數字
random.randrange(1000,2000)
# 隨機浮點數:
print random.random()
print random.uniform(1, 10)
# 隨機字符:
print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')
# 多個字符中生成指定數量的隨機字符:
print random.sample('zyxwvutsrqponmlkjihgfedcba',5)
----->>[w],[e],[r],[t]
#Python join() 方法用於將序列中的元素以指定的字符連接生成一個新的字符串。
# 從a-zA-Z0-9生成指定數量的隨機字符:
ran_str = ''.join(random.sample(string.ascii_letters + string.digits, 8))
print ran_str
# 多個字符中選取指定數量的字符組成新字符串:
prin ''.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5))
# 隨機選取字符串:
print random.choice(['剪刀', '石頭', '布'])
# 打亂排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print random.shuffle(items)
#產生2行三列均勻分布隨機數組
print random.rand(2,3)
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') plt.show()

4. 排列
函數名稱 | 函數功能 | 參數說明 |
---|---|---|
shuffle(x) | 打亂對象x(多維矩陣按照第一維打亂) | 矩陣或者列表 |
permutation(x) | 打亂並返回該對象(多維矩陣按照第一維打亂) | 整數或者矩陣 |
#正態分布 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]] #按照行打亂了,也就是交換了行