一、什麼是Numpy?¶
Numpy是Python中用於科學計算的核心庫,提供了高效的多維數組對象(ndarray)和大量數學函數。隨機數生成是Numpy的常用功能之一,廣泛用於數據分析、機器學習、模擬實驗等場景。而np.random是Numpy專門用於生成隨機數的子模塊,其中rand和randn是最基礎且常用的兩個函數。
二、安裝與導入Numpy¶
首先確保已安裝Numpy(若未安裝,可通過pip install numpy命令安裝)。在代碼中導入Numpy:
import numpy as np
三、隨機數生成的基本概念¶
Numpy的隨機數是僞隨機數(由算法生成,固定種子可復現),常用分佈包括:
- 均勻分佈:每個數出現的概率相同(類似擲骰子,每個面概率相等)。
- 正態分佈(高斯分佈):數據集中在均值附近,呈“鐘形”分佈(類似人類身高,多數人接近平均身高,極端值少)。
四、np.random.rand:生成均勻分佈隨機數¶
np.random.rand(d0, d1, ..., dn)用於生成[0, 1)區間內的均勻分佈隨機數,參數d0, d1,...表示數組的形狀(如行數、列數)。
示例1:生成1維數組¶
# 生成長度爲5的1維數組(形狀:(5,))
arr1 = np.random.rand(5)
print(arr1)
# 輸出示例(每次運行結果不同):[0.3456 0.1234 0.7890 0.5678 0.9012]
示例2:生成多維數組¶
# 生成2行3列的矩陣(形狀:(2, 3))
arr2 = np.random.rand(2, 3)
print(arr2)
# 輸出示例:
# [[0.1234 0.5678 0.9012]
# [0.3456 0.7890 0.2345]]
關鍵特點:¶
- 所有元素值在
[0, 1)之間。 - 若參數爲空(
np.random.rand()),返回標量0~1的隨機數。
五、np.random.randn:生成標準正態分佈隨機數¶
np.random.randn(d0, d1, ..., dn)用於生成標準正態分佈(均值=0,標準差=1)的隨機數,參數含義與rand相同。
示例1:生成1個隨機數¶
# 生成1個標準正態分佈隨機數
num = np.random.randn()
print(num)
# 輸出示例:0.5678(可能爲正或負,多數值集中在-1~1之間)
示例2:生成2×2矩陣¶
# 生成2行2列的標準正態分佈矩陣
mat = np.random.randn(2, 2)
print(mat)
# 輸出示例:
# [[-0.1234 0.5678]
# [ 0.9012 -0.3456]]
關鍵特點:¶
- 數據集中在0附近,大部分值在
[-1, 1]之間,極端值(如±3以上)概率較低。 - 若需調整均值或標準差,可通過公式轉換:
μ + σ * np.random.randn(shape)(μ爲目標均值,σ爲目標標準差)。
六、rand與randn的對比¶
| 特性 | np.random.rand() |
np.random.randn() |
|---|---|---|
| 分佈類型 | 均勻分佈([0, 1)) | 標準正態分佈(均值0,標準差1) |
| 數據範圍 | 所有元素在0到1之間(含0不含1) | 可正可負,多數值集中在-1~1之間 |
| 參數 | 形狀(如(m, n)) |
形狀(如(m, n)) |
| 核心作用 | 生成等概率取值的隨機數據 | 生成接近自然現象的“正態分佈”數據 |
七、實用技巧:固定隨機種子¶
爲了避免隨機結果波動(如復現實驗),可通過np.random.seed()固定種子:
np.random.seed(0) # 種子固定爲0,後續隨機數生成結果一致
print(np.random.rand(2, 2))
# 輸出:
# [[0.3980 0.4109]
# [0.0399 0.3398]]
八、總結¶
np.random.rand(shape)生成[0, 1)均勻分佈的隨機數組,適合需要“等概率取值”的場景(如初始化權重)。np.random.randn(shape)生成標準正態分佈的隨機數組,適合模擬自然數據波動(如生成噪聲、測試算法魯棒性)。
建議:初學者可通過多次生成不同形狀的數組,觀察數值分佈特點,快速熟悉兩者區別。
練習¶
嘗試生成以下隨機數組,並觀察結果:
1. np.random.rand(3, 4)(3行4列均勻分佈矩陣)
2. np.random.randn(1000)(1000個標準正態分佈數,計算均值和標準差是否接近0和1)
3. 固定種子seed=1,生成np.random.rand(2)並對比兩次運行結果是否相同。