一、Numpy庫介紹
NumPy是Python語言的一個擴充程序庫,利用它可以更加方便地進行科學計算。它是收集了各種各樣的數學和科學運算模式的一個大雜燴。不僅如此,NumPy還為數組運算提供了大量的支持,這些函數可以讓你輕鬆處理數學運算和數組運算,使得眾多科學計算的問題變得異常簡單。
而在NumPy庫中,Random模塊是用於生成隨機數據的模塊,在數據模擬、隨機算法等方面起到了很大的作用。
二、隨機數生成
在Python中,我們可以用random模塊來生成隨機數。不過,Numpy中的Random模塊則可以更高效地生成隨機數。在NumPy中,我們可以使用rand()、randn()和randint()函數來生成隨機數。
1. rand()函數
rand()函數生成一個\[0,1\]區間的隨機數,並且這些隨機數是均勻分布的
import numpy as np
a = np.random.rand(3,3)
print(a)
輸出:
array([[ 0.34323275, 0.07146803, 0.85739212],
[ 0.1031421 , 0.18833668, 0.51419756],
[ 0.55054841, 0.71160147, 0.93443114]])
2. randn()函數
randn()函數可以生成標準正態分布(μ=0,σ=1)的隨機數。它們是不同的,因為後者按照正態分布生成隨機數,而前者按照均勻分布生成隨機數。
b = np.random.randn(3,3)
print(b)
輸出:
array([[ 0.2490965 , 1.01225325, 0.29993122],
[ 0.39395521, 0.44237272, 1.46365166],
[ 1.18778469, 0.2700795 , 0.47529234]])
3. randint()函數
randint()函數可以生成一個給定的半開區間內\[low, high)的整數,包括low,但是不包括high。
low, high = 1, 100
c = np.random.randint(low, high, size=(3,3))
print(c)
輸出:
array([[58, 18, 38],
[56, 22, 56],
[96, 93, 55]])
三、隨機生成分布的數據
1. 生成正態分布數據
除了生成標準正態分布隨機數之外,我們還可以使用normal(loc, scale, size)函數生成正態(高斯)分布的隨機數。
- loc:正態分布的均值
- scale:正態分布的標準差
- size:輸出的隨機數的維度大小
mu, sigma = 0, 0.1
s = np.random.normal(mu, sigma, 1000)
print(s)
輸出:
array([ 0.19041012, 0.00838044, 0.1057123 , 0.23882289, -0.07714065,
0.08705977, -0.02627654, -0.19861715, 0.00686985, 0.15619873,
...,
0.08181724, -0.10527211, -0.1526315 , -0.11637847, -0.08640187,
0.00130285, 0.08699732, 0.17909456, -0.1137537 , -0.13693572])
2. 生成泊松分布數據
使用numpy庫的poisson(lam, size=None)函數可以生成一個參數為λ給出的泊松分布的隨機數。
lam = 3 # lamda
size = 1000
s = np.random.poisson(lam, size)
print(s)
輸出:
array([1, 2, 2, 1, 7, 3, 3, 5, 1, 6, ..., 6, 5, 1, 2, 4, 3, 2, 1, 1, 2])
3. 生成Beta分布數據
Beta分布是一種常用的概率分布,其結果在\[0,1\]區間內。使用numpy庫的beta函數,可以選擇生成形態參數為α和β的Beta分布的隨機數。
alpha, beta = 2, 5
s = np.random.beta(alpha, beta, 1000)
print(s)
輸出:
array([ 0.31903005, 0.11387955, 0.42286611, 0.44858347, ...,
0.46468957, 0.38638198, 0.29959251, 0.18525859])
四、分布函數的可視化
可視化可以幫助我們更好的理解生成的數據分布情況,而matplotlib庫是一個用於繪圖的常用工具,在與numpy配合使用時,可隨機生成各種圖形。下面我們來生成一個正態分布的圖形可視化,代碼如下:
import matplotlib.pyplot as plt
mu, sigma = 0, 0.1
s = np.random.normal(mu, sigma, 1000)
count, bins, ignored = plt.hist(s, 30, density=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()
輸出:
五、總結
NumPy庫的Random模塊為我們生成高效、隨機、分布式的數據提供了非常好的方法,我們可以根據需要生成符合自己要求的分布式的隨機數據並進行可視化,大大提高了數據模擬和隨機算法等方面的效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/275895.html